windows - __stdcall 没有任何修饰

标签 windows dll calling-convention build-tools stdcall

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

func1 = func1
func1@4 = func1

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

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

最佳答案

我不知道是否可以使用lib.exe创建正确的.lib文件,所以我建议创建一个带有原始导出函数 stub 的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);
}

关于windows - __stdcall 没有任何修饰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9870562/

相关文章:

windows - 批处理文件 - 将变量设置为 “if” 然后 "set"

c++ - Windows、Mingw Qt 应用程序不在部署的计算机上运行

java - File.isDirectory() 对于同一目录返回 true 和 false

c++ - 调用约定错误!! (ESP 的值未在函数调用中正确保存)

assembly - 堆栈中的返回地址是如何指定的?

windows - Powershell 获取 ipv4 地址到变量中

windows - 在 D 中使用 Windows dll 的正确方法?

c++ - 从 DLL 函数返回字符串

python - cx_freeze:ImportError:DLL加载失败:找不到此指定的模块

assembly - 谁负责在 MIPS 中保存被调用者保存的寄存器?