【问题标题】:lnk1136 - invalid or corrupt .liblnk1136 - 无效或损坏的 .lib
【发布时间】: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,知道我做错了什么吗?

标签: c++ dll .lib


【解决方案1】:

嗯,这是一个相当简单的解决方案。

bool(*CallDll)(char*);
HINSTANCE h = LoadLibrary(L"mydll.dll");

void main() {
    CallDll = (bool(*)(char*))GetProcAddress(h, "CallDll");
    bool test;
    test = CallDll((char*)"MyArg");
}

只需要...

【讨论】:

  • 嗯,这个解决方案有一个错误的演员阵容,这是正确的:CallDll DoCallDll;DoCallDll=(bool(*)(char*))GetProcAddress(h,"CallDll");bool test=DoCallDll((char*)"MyArg");
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2020-03-21
相关资源
最近更新 更多