DLL学习笔记

读<VC技术内部第四版>

 

Win32 DLL
在DLL代码中,必须显示生命导出函数,类似这样:
extern "C" __declspec(dllexport) void MyFunction(int n);
在客户方面,必须声明对应的导入函数,类似这样:
extern "C" __declspec(dllimport) void MyFunction(int n);
其中extern "C"是为了让MyFunction能够被正确使用,而不是在程序中以一堆乱我们不认识的符号的形式出现

DEF格式的文件在Win32环境里没有太多的用途,只是在导出是C++函数时,必须在EDF文件里使用修饰名。

进程中的每一个DLL都被一个唯一的32位HINSTANCE值所标识。如果程序使用了多个DLL,则每个都有不同的HINSTANCE值。实例句柄对装载资源特别重要。Win32函数FindResource带一个HINSTANCE参数。如果我们从DLL中获取资源,则必须指定DLL的实例句柄。

显示连接DLL的意思是通过DLL文件对应的LIB文件装载,隐式则直接装载DLL。如果用LoadLibrary显示连接DLL的话,可以指定DLL的全路径名。如果没有指定路径名或者用了隐式连接,则Windows将按照一定的顺序搜索定位DLL(P430,下面有个小心,要注意)。

调试DLL,第一次要指定对应的EXE文件路径,这个EXE文件要调用这个DLL,而且最好放到这个DLL程序对应的debug目录下。

 

MFC DLL
AppWizard可以让我们创建MFC库支持的两种DLL:扩展的DLL和正规的DLL。
扩展DLL理解就是与C++兼容性好,可以导出整个类,它不可以脱离MFC库;而正规DLL可以被任何Win32变成环境(包括VB5.0)装载,它可以导出C风格的函数,但不能导出C++类,正规DLL可以独立于MFC库。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章