求救,vc中调用dll问题
我的dll这样编的:ad.dll
头文件:
extern "C" int _cdecl Summary(int n);
cpp文件:
extern "C" int _cdecl Summary(int n)
{
return n+2;
}
然后我调用它:
#include <iostream>
#include<stdio.h>
#include<windows.h>
typedef int ( *Summar)(int x);
void main()
{
HINSTANCE h=LoadLibrary("ad.dll");
if (h==NULL)
{
printf("DLL Can't find!\n");
return;
}
Summar Summar1=(Summar)GetProcAddress(h,"Summary");
if (Summar1==NULL)
{
printf("Function Can't find!\n");
return;
}
std::cout<<Summar1(3) ;
}
最后执行结果:Function Can't find!
怎么回事哪里错了;高手指教[size=12px][/size]
[解决办法]
加上 declspec(_dllexport)
[解决办法]
试试Summar Summar1=(Summar)GetProcAddress(h,"_Summary@8"); 如果还不行,用dumpbin看看它导出的函数名到底是啥
编译器在编译时是要改函数名字的,不是直接用summary即可。先用dumpbin看看是最好的,另外的方法就是用导出dll带的那个lib,用连接那个lib的方法进行动态加载,由系统去决定符号名
[解决办法]
1楼说的对。
因为用了extern "C"告知编译器不要乱改名字,所以不会有2楼说的问题。
[解决办法]
H中这么改
extern "C" __declspec(dllexport) int _cdecl Summary(int n);
CPP中:
extern "C" __declspec(dllexport) int _cdecl Summary(int n)
{
return n+2;
}
[解决办法]
...API库的编码问题