今天在devc++封装dll库,按着教程折腾了好久,一直调用失败,最后发现,在导出函数前,除了要加__declspec(dllexport)
,还要加 extern "C"
完整方法如下:
-
在你使用的编译器上创建dll项目
-
添加测试函数
(1) dll文件#ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL #define DLLIMPORT __declspec(dllexport) #else #define DLLIMPORT __declspec(dllimport) #endif extern "C" __declspec(dllexport) int HelloWorld(int); #endif
(2)dllmain.cpp文件
#include "dll.h" #include <windows.h> #include <iostream> extern "C" __declspec(dllexport) int HelloWorld(int a) { std::cout<<"Hello World from DLL!"<<std::endl; return 29; } BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { switch(fdwReason) { case DLL_PROCESS_ATTACH: { break; } case DLL_PROCESS_DETACH: { break; } case DLL_THREAD_ATTACH: { break; } case DLL_THREAD_DETACH: { break; } } /* Return TRUE on success, FALSE on failure */ return TRUE; }
-
在dll目录下新建一个新的文件调用dll
#include<bits/stdc++.h> #include<Windows.h> using namespace std; int main() { typedef int (*FUNC)(); HINSTANCE Hint = LoadLibrary("cec2013.dll"); if(Hint==NULL){ cout<<"1"; } FUNC f=(FUNC)GetProcAddress(Hint,"HelloWorld"); if(f==NULL){ cout<<"2"; } cout<<f(); }
-
测试结果: