我有一个.dll,我怀疑它使用__stdcall函数,但是完全没有修饰的名称(甚至不是下划线或@符号)。我为它编写了一个.def文件,别名如下
func1 = func1
func1@4 = func1但是我认为lib (我用它来从.def文件创建导入库)忽略了别名(链接器仍然说func1@4是未定义的)。
如何创建将func1@4映射到func1的导入库?
发布于 2012-03-26 13:00:03
我不知道是否可以用.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-26 10:42:52
您应该将函数原型声明为extern "C“,因为您(显然)在C++模式下编译:
extern "C" void func1(void); // correct prototype, add __stdcall if necessary?可以将头文件的整个部分包装在其中。
extern "C" {
// ... C compatible declarations
}https://stackoverflow.com/questions/9870562
复制相似问题