导出函数
_declspec(dllexport) int function()
导出类
class _declspec(dllexport) class1
引用Dll函数声明
_declspec(dllimport) int function()
解决不同编译器名字改编的问题
在定义导出函数时加上 extern "C" (大写C),如 extern "C" _declspec(dllexport) int function()
但这种方法有一个缺陷,不能用于导出一个类的成员函数,只能用于导出全局函数这种情况。
标准调用约定_stdcall
于是可以声明为 extern "C" _declspec(dllexport) int _stdcall function()
最终解决 采用模块定义文件(DEF)
如在Dll2工程中添加Dll2.def文件
Dll2.def 文件内容可以如下:
LIBRARY Dll2
EXPORT
function()
显示加载方式加载Dll
LoadLibary函数 例如:
HINSTANCE hInst=LoadLibrary(_T("User32.DLL"));
if(hInst)
{
typedef BOOL (WINAPI * MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun=NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
if(fun)
{
fun( this->GetSafeHwnd(), RGB(255,0,255) , 0 , LWA_COLORKEY );
}
FreeLibrary(hInst);
}
根据序号访问Dll中的导出函数
MAKEINTRESOURCE宏把指定的函数序号转换为相应的函数名字字符串,这里的函数序号就是在Dll中声明的导出函数序号。