我LoadLibrary已经执行成功了,而且我输入的函数名也没有错,为什么GetProcAddress会无法得到函数地址呢?
用GetLastError()返回的值是127。
即使我只是想获取向导产生的导出函数例子,也是不行.
用GetLastError()返回的值是127。
即使我只是想获取向导产生的导出函数例子,也是不行.
解决方案 »
- 今天发现 codeproject 无法打开了,有人遇到过没
- error LNK2019: 无法解析的外部符号
- 急 一个简单的CSTRING输出问题
- 有这样的一个控件嘛?
- 求教大家,vc ,directshow 中有没有获取当前屏幕数的函数呢?
- 请教:当不知道两个变量的类型的时候(可能是string, int, double)时,怎么比其大小
- 我做了一个Client-Server的通信,是用对话框做的.用FormView怎么通信啊?(急!!!送分100)
- 初学者关于如何打开一幅bmp格式图像文件
- 怎么用vc向导生成的project也会出错呀?
- 能提供一下挤房间(浩方\vs等游戏平台)程序的思路吗?
- 请教各位
- 请教自定义数据长度的问题
FUN pInit = (FUN)::GetProcAddress(h, "Init");
你可以使用VC自带的Depends.exe工具查看你要调用的DLL中的导出函数名称,如果名称没有问题,那就是你的代码的问题了,用下面这中方式试一试
HINSTANCE hInst = LoadLibrary("你的DLL名称(包括路径)");
if(hInst)
{ //定义函数指针,以和你要调用的DLL中的导出函数一致
typedef 函数返回值类型 (WINAPI *MYFUNC)(函数参数列表);
MYFUNC fun = NULL;
//取得导出函数的地址,并赋值给上面定义的函数指针
fun=(MYFUNC)GetProcAddress(hInst, "DLL中导出函数名称");
if(fun)
{
fun(函数参数);//通过函数指针来调用导出函数
}
FreeLibrary(hInst); //释放DLL
}
可能是函数名manling加extern "C"的作用是强制该输出函数的名称保留C语言的命名方式。这是因为,
如果不强制的话,VC就将你的函数编译成C++的命名方式,即,在你的函数名后面加上一
些特殊的符号。DLL输出的函数名字就不是你在代码里写的那个函数名了。当然,不加
extern "C",仍能调用该函数,只不过,你必须先查出DLL中的真实函数名才行
(可以用VC提供的dumpbin工具查得DLL中的输出函数名)。这件事是C++语言本身的特性,
和你使用何种工程向导无关。此外,在现在的WIN32环境中,cdecl和stdcall的调用方
式是完全一样的,你不用担心它们不兼容。
加入:
EXPORTS ; Explicit exports can go herefunc1 @1func2 @2func1、func2分别是导出函数名,依次类推
命令行下 dumpbin /exports filename.dll
要使用extern“c”。