我有一个.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
}