__declspec(dllexport) int __stdcall TestFunktion(void) {返回0;}
结果如下:
在Visual中,在没有DEF文件的情况下,是否可以轻松地创建函数而不进行装饰?
发布于 2021-09-06 10:40:19
解决此问题的标准方法是在.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
,但您选择将它们导出为未修饰的符号)--也许您可以对函数的反汇编进行某种分析,并试图理解它的调用约定,但这是非封闭的,非常麻烦。
这就是为什么记录良好的调用约定和良好文档化的API签名非常重要的原因。
https://stackoverflow.com/questions/69072717
复制相似问题