C++ 获取DLL中导出函数的签名

C++ 获取DLL中导出函数的签名,c++,c,dll,function,C++,C,Dll,Function,是否可以从DLL获取导出(C风格?)函数的签名(参数计数/类型、返回类型)?我可以用查看函数名、地址、序号等的列表,但无法查看签名。我只有dll文件,没有.h和.def文件 更新:使用名为的工具,我可以附加到使用上述dll的进程,并查看对函数的调用。这让我可以看到参数的数量、返回值和它们的整数值(指针?),但这没有多大帮助。我可能应该找到一种方法来确定指针在调用时指向的结构类型。C++中的“/P>< P>”,函数签名是“以编译器依赖的方式”。这在C中不会发生。因此,如果DLL中有C函数,您将看到

是否可以从DLL获取导出(C风格?)函数的签名(参数计数/类型、返回类型)?我可以用查看函数名、地址、序号等的列表,但无法查看签名。我只有dll文件,没有.h和.def文件


更新:使用名为的工具,我可以附加到使用上述dll的进程,并查看对函数的调用。这让我可以看到参数的数量、返回值和它们的整数值(指针?),但这没有多大帮助。我可能应该找到一种方法来确定指针在调用时指向的结构类型。C++中的“/P>< P>”,函数签名是“以编译器依赖的方式”。这在C中不会发生。因此,如果DLL中有C函数,您将看到未混合的名称。如果是C++的,你会看到被损坏的。 C++需要损坏的名称,以允许链接器解析具有不同签名的重载函数


我认为没有任何方法可以从“C”DLL中获取函数信号。它们根本不存在。

对于C函数,这些信息根本不存储在DLL中。我唯一能建议的是分解函数,看看它如何与堆栈上的变量交互,然后尝试确定签名


祝你好运

DLL不存储它们导出的函数的签名。其他的答案已经提到C++,当C++函数被导出为C++时,名字就真的被破坏了。使用正确的编译器的损坏方案对其进行修改,您将获得签名。但是大多数DLL不使用C++的名称导出C++函数。相反,DLL选择导出的函数使用C样式的名称导出,因此即使DLL是用C++编写的,导出的函数仍然没有任何签名信息。 你没有头球?大多数供应商在其SDK中都包含此类内容。如果你没有得到一个,然后向供应商投诉。如果你不应该得到一个,那么也许你正在以错误的方式进行你的任务;您确定要直接使用该DLL吗

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