【发布时间】:2015-08-13 15:55:16
【问题描述】:
我有一个小问题。我有一个 dll C 库、一个头文件以及调用这个 dll 所需的所有其他文件。我试过通过第三方程序调用这个 dll 并且它正在工作。 但是,当我尝试直接调用它(加载时动态链接并使用给定的头文件)时,mydll.lib 总是会出现链接器错误 1136。
使用头文件:
#include "windows.h"
#include "mydll.h"
void main() {
bool test;
test = CallDll("MyArg");
}
头文件中的代码如下:
extern "C" bool _stdcall CallDll(char* MyArg);
在加载时使用动态链接:
#include "windows.h"
bool(*CallDll)(char*);
HINSTANCE h = LoadLibrary((LPCSTR)"mydll");
void main() {
CallDll = (bool(*)(char*))GetProcAddress(h, "CallDll");
bool test;
test = CallDll("MyArg");
}
现在我做错了什么?我怀疑 mydll.lib 文件是否损坏,因为如果这是问题所在,我无法使用第三方程序访问 dll。
【问题讨论】:
-
您必须将 DLL 而不是 LIB 提供给 LoadLibrary。
-
链接器错误消息显示 mydll.lib 已损坏。你为什么怀疑它?您是否只是将 mydll.dll 复制到 mydll.lib 并希望它能够工作?它不会。从作者或供应商那里得到一个好的。
-
如果使用
LoadLibrary,则不必链接.lib文件 -
你正在混合隐式和显式链接:阅读更多here
-
@WouterHuysentruit 感谢您的所有帮助,当我在 VS 中删除指向 .lib 文件的链接时,它起作用了。现在我有另一个问题,用 typdef bool( * CallDll)(char *,double,double&) 定义的函数指针不知何故只接受一个输入,即使我指定了 3,知道我做错了什么吗?