我有一个.dll
我怀疑使用__stdcall
函数,但完全没有修饰的名称(甚至不是下划线或@
符号)。我.def
用别名为它写了一个文件
func1 = func1
func1@4 = func1
但我认为lib
(我用来从.def
文件创建导入库)忽略了别名(链接器仍然说func1@4
未定义)
如何创建将映射func1@4
到的导入库func1
?
我有一个.dll
我怀疑使用__stdcall
函数,但完全没有修饰的名称(甚至不是下划线或@
符号)。我.def
用别名为它写了一个文件
func1 = func1
func1@4 = func1
但我认为lib
(我用来从.def
文件创建导入库)忽略了别名(链接器仍然说func1@4
未定义)
如何创建将映射func1@4
到的导入库func1
?
我不知道是否可以创建正确的.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);
}
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
}