2

我有一个.dll我怀疑使用__stdcall函数,但完全没有修饰的名称(甚至不是下划线或@符号)。我.def用别名为它写了一个文件

func1 = func1
func1@4 = func1

但我认为lib(我用来从.def文件创建导入库)忽略了别名(链接器仍然说func1@4未定义)

如何创建将映射func1@4到的导入库func1

4

2 回答 2

2

我不知道是否可以创建正确的.lib文件lib.exe,所以我建议创建一个带有原始 DLL 导出的函数存根的 DLL。

示例dll.cpp文件:

void __stdcall foo(int) {}

dll.def文件:

EXPORTS
foo=foo

然后从 IDE 或命令行编译它:

cl dll.cpp /link /dll /def:dll.def /noentry

它将创建正确的dll.lib文件,因此您可以将其与如下代码一起使用:

void __stdcall foo(int);
#pragma comment(lib, "dll")
int main()
{
    foo(42);
}
于 2012-03-26T13:00:03.923 回答
0

You should be declaring the function prototype as extern "C" as you are (obviously) compiling with in C++ mode:

extern "C" void func1(void); // correct prototype, add __stdcall if necessary?

You can wrap entire sections of a header file inside

extern "C" {
    // ... C compatible declarations
}
于 2012-03-26T10:42:52.993 回答