首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带DEF的DLL导出__stdcall和带有VS的修饰函数名。

不带DEF的DLL导出__stdcall和带有VS的修饰函数名。
EN

Stack Overflow用户
提问于 2021-09-06 10:04:19
回答 1查看 445关注 0票数 2
  1. 如果我有DLL file...how,我可以看到函数构建为__stdcall或__cdecl?
  2. ,我想创建一个DLL来导出函数为__stdcall,没有DEF文件,并使用Visual来修饰函数名,比如:

__declspec(dllexport) int __stdcall TestFunktion(void) {返回0;}

结果如下:

在Visual中,在没有DEF文件的情况下,是否可以轻松地创建函数而不进行装饰?

EN

Stack Overflow用户

回答已采纳

发布于 2021-09-06 10:40:19

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

但是,如果出于任何原因不想使用.def文件,则可以编写如下代码:

代码语言:javascript
运行
复制
__declspec(dllexport) int __stdcall TestFunktion(void)
{
    #pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)
    ...
}

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

至于你的另一个问题:

代码语言:javascript
运行
复制
If I have a DLL file...how can I see functions are built as __stdcall or __cdecl?

这在DLL中是不可能的,尤其是如果您故意忽略导出表中的提示(例如,您可能能够看到一个修饰的导出符号并推断它是__stdcall,但您选择将它们导出为未修饰的符号)--也许您可以对函数的反汇编进行某种分析,并试图理解它的调用约定,但这是非封闭的,非常麻烦。

这就是为什么记录良好的调用约定和良好文档化的API签名非常重要的原因。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69072717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档