获取DLL中导出函数的签名

是否有可能从DLL中获取导出的(C样式?)函数的签名(参数计数/类型,返回类型)? 我可以使用DLL导出查看器查看函数名称,地址,序数等列表,但我无法查看签名。 我只有dll文件,既没有.h也没有.def文件。

更新:使用名为API Monitor的工具,我可以附加到使用上述dll的进程并查看对函数的调用。 这让我可以看到参数的数量,返回值及其整数值(指针?),但这并没有多大帮助。 我可能应该找到一种方法来确定这些指针在调用时指向的结构类型。

DLL不存储它们导出的函数的签名。 其他答案提到了C ++,当C ++函数导出为C ++时 ,名称确实会被破坏。 使用正确的编译器修改方案对其进行解算,您将获得签名。 但是大多数DLL不使用C ++名称导出C ++函数。 相反,DLL选择导出的函数是使用C样式名称导出的,因此即使DLL是用C ++编写的,导出的函数仍然不会有任何签名信息。

你没有标题? 大多数供应商都在其SDK中包含了这类内容。 如果你没有得到,那就向卖主抱怨。 如果你不应该得到一个,那么也许你会以错误的方式处理你的任务; 你确定你应该直接使用那个DLL吗?

如果您没有头文件,那么您可能还会问自己,无论如何,您是否真的允许在程序中使用DLL。 如果它只是您在系统上找到的任意DLL,那么即使您可以为其编写代码,也可能不允许在发运程序时重新分发它。

在C ++中,函数签名以编译器相关的方式被 “修改”到名称中。 这在C中不会发生。因此,如果您的DLL中有C函数,您将看到未编码的名称。 如果它是C ++版本,你会看到受损的版本。

C ++需要受损的名称以允许链接器解析具有不同签名的重载函数。

我认为你没有办法从“C”DLL中获取函数的特征。 他们根本就不存在。