gpt4 book ai didi

c - DLL 导出 __stdcall 不带 DEF 文件并用 VS 修饰函数名称

转载 作者:行者123 更新时间:2023-12-03 08:16:56 24 4
gpt4 key购买 nike

  1. 如果我有一个 DLL 文件...我如何才能看到函数被构建为 __stdcall 或 __cdecl?
  2. 我想创建一个 DLL,将函数导出为 __stdcall,无需 DEF 文件,并使用 Visual Studio 修饰函数名称,例如:
__declspec(dllexport) int __stdcall TestFunktion(void)
{
return 0;
}

结果如下所示: enter image description here

是否有任何简单的方法可以在 Visual Studio 中创建没有修饰且没有 DEF 文件的函数?

最佳答案

解决此问题的标准方法是在 .def 中定义导出的未修饰名称。文件 - 这是您应该使用的方法。


但如果出于某种原因您不想使用 .def文件中,您可以编写如下代码:

__declspec(dllexport) int __stdcall TestFunktion(void)
{
#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)
...
}

__FUNCDNAME__将评估您的修饰函数名称,而 __FUNCTION__将评估您未修饰的函数名称 - 这实际上是 .def 中等效行的替换文件。


至于你的其他问题:

If I have a DLL file...how can I see functions are built as __stdcall or __cdecl?

仅从 DLL 中这是不可能的,更不用说如果您故意省略导出表中的提示(即,您可能能够看到修饰的导出符号并推断它是 __stdcall ,但您选择将它们导出为未修饰的符号) - 也许如果您对函数的反汇编执行某种分析并尝试理解其调用约定,但这是非封闭的并且非常hacky。

这就是为什么有据可查的调用约定和有据可查的 API 签名很重要。

关于c - DLL 导出 __stdcall 不带 DEF 文件并用 VS 修饰函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69072717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com