我有一个.dll
我怀疑使用__stdcall
个函数,但完全未修饰的名称(甚至不是下划线或@
符号)。我为它写了一个.def
文件,其中包含
func1 = func1
func1@4 = func1
但我认为lib
(我用它来创建.def
文件中的导入库)忽略了别名(链接器仍然说func1@4
未定义)
如何创建将func1@4
映射到func1
的导入库?
答案 0 :(得分: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);
}
答案 1 :(得分:0)
您应该将函数原型声明为extern“C”,因为您(显然)在C ++模式下进行编译:
extern "C" void func1(void); // correct prototype, add __stdcall if necessary?
您可以将头文件的整个部分包装在
中extern "C" {
// ... C compatible declarations
}