C++ dll 和 Delphi dll 之间有真正的区别吗? 应用程序仅加载 C++ dll。 将调用约定更改为 cdecl 没有用 有没有办法判断一个dll是否是C++ dll? 这个dll有什么好处呢? 我的意思是 Delphi dll 可以有 Delphi 的参数和/或返回类型。 就像 C++ dll 可能有一些专有的数据类型/
感谢您的任何提示
最佳答案
C++ dll 当然可以使用或公开 C++ 特定的项目(C++ 类、模板函数等),并且 Delphi DLL 可以公开 Delphi 特定的项目(集、字符串等)。但如果两者都写得正确,并且只使用其他语言也可以使用的东西,那么应该没有区别。
事实上,并非所有 C++ 或 Delphi DLL 都被正确编写。另外,Delphi 中的默认调用约定是 register
(C++Builder 中的 __fastcall
),而 C 和 C++ 默认使用 cdecl
。但通常两种语言都应该使用 stdcall
。
使用 DLL 的唯一方法是获取它的头文件 (.h),或者 Delphi 导入单元。 .h 文件可以转换为导入单元。如果您只有一个 DLL 而没有这些,那么尝试猜测函数的参数就没有多大意义。
如果您使用 TDUMP.exe 或 Dependency Walker 查看 DLL,您可能会得到提示,正如另一个答案中所述。依赖于例如msvcrtXX.dll 可能是一个很好的暗示,它是一个 C++ DLL。
您也可以尝试从 DLL 中获取 .tlb。您可以在 IDE 中执行此操作(根据内存:“组件菜单”-“导入组件”或类似的内容)。
如果您想了解调用约定,请阅读 this ,特别是关于找出调用约定的部分。
添加
一些 C++ 程序员忘记将其声明包装在 extern "C"
block 中,因此导出的函数被破坏。这可以告诉您需要哪些参数,但您会得到难看的名称。为此,Dependency Walker 是一个很大的帮助,因为它可以翻译它们(至少对于 VC++ 生成的或兼容的 DLL)。不过,它使得使用来自不同 C++ 编译器或 C 编译器的这些函数变得相当困难。
关于delphi - C++ dll 和 Delphi dll 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6906346/