首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,vc中调用dll有关问题

2012-02-29 
求救,vc中调用dll问题我的dll这样编的:ad.dll头文件:externCint_cdeclSummary(intn) cpp文件:externC

求救,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库的编码问题

热点排行