Windows动态库链接库DLL开发及应用
软件版本: VC6.0
操作系统: Windows7
动态库开发: 1.VC6.0环境下新建“Win32 Dynamic-Link Library”工程(工程名为mydll) 2.添加如下代码 #include
动态库Banner BOOL WINAPI DllMain( HANDLE hModule, DWORD reason, LPVOID lpReserved ) { if(reason) { printf("加载动态库\r\n"); } else { printf("卸载动态库\r\n"); } return TRUE; } 该函数在动态库被加载(reason=1)和卸载(reason=0)时自动调用;
动态库应用(方案一 动态调用): 1.新建一个应用工程,例如“Win32 Console Application” 2.将mydll.dll文件复制到工程目录下 3.添加如下代码: #include
动态库应用(方案二 静态调用): 1.新建一个应用工程 2.将mydll.dll和mydll.lib文件复制到工程目录下(重要) #pragma comment(lib, "mydll.lib") extern "C" _declspec(dllimport) void dprint(void); //导出 int main(int argc, char* argv[]) { dprint(); } 注意事项: 1.如果不指定extern "C" 可能会造成编译错误; 2.可以将导出函数定义在mydll.h文件中; 3.进行静态调用,编译时需要提供lib文件(BCB需对lib文件进行转换); 转换命令:coff2omf -lib:ms usbrd32_win.lib bcb usbrd32_bcb.lib 4.即使静态调用,运行时依然需依赖于dll文件;
基于C#的动态库调用 //引用头文件 using System.Runtime.InteropServices; //导入函数 [DllImport("mydll.dll", EntryPoint = "GetDllVersion", CallingConvention = CallingConvention.StdCall)] public static extern String GetDllVersion(); //应用 GetDllVersion(); 注意事项: 1.导出函数第一个参数是动态库名称 2.导出函数必须用static extern关键字修饰;