C和x2B之间的差异+;DLL和Delphi DLL < C++ > DLL与Delphi DLL之间有什么区别? 应用程序只加载C++ DLL。 将呼叫约定更改为cdecl是没有用的 有没有方法可以找到一个DLL是一个C++ DLL吗? 那个dll的优点是什么? 我的意思是Delphi dll可以有参数和/或Delphi的返回类型。 就像C++的DLL可能有一些独占数据类型/< /P>

C和x2B之间的差异+;DLL和Delphi DLL < C++ > DLL与Delphi DLL之间有什么区别? 应用程序只加载C++ DLL。 将呼叫约定更改为cdecl是没有用的 有没有方法可以找到一个DLL是一个C++ DLL吗? 那个dll的优点是什么? 我的意思是Delphi dll可以有参数和/或Delphi的返回类型。 就像C++的DLL可能有一些独占数据类型/< /P>,delphi,dll,Delphi,Dll,感谢您的提示您可以使用Dependency Walker检查DLL中的函数: 当然,C++DLL可以使用或公开特定于C++的项(C++类、模板函数等),而Delphi DLL可以公开特定于Delphi的项(集合、字符串等)。但是如果两种语言都写得很好,并且只使用其他语言也能使用的东西,那么应该没有什么区别 事实是,不是所有的C++或Delphi DLL都被正确地写入。Delphi中的缺省调用约定是注册> (C++ C++ Builder中的代码>登记号>代码>,C和C++默认使用 CDECL <

感谢您的提示

您可以使用Dependency Walker检查DLL中的函数:


当然,C++DLL可以使用或公开特定于C++的项(C++类、模板函数等),而Delphi DLL可以公开特定于Delphi的项(集合、字符串等)。但是如果两种语言都写得很好,并且只使用其他语言也能使用的东西,那么应该没有什么区别

事实是,不是所有的C++或Delphi DLL都被正确地写入。Delphi中的缺省调用约定是注册> <代码>(C++ C++ Builder中的代码>登记号>代码>,C和C++默认使用<代码> CDECL < /C>。但通常两种语言都应该使用stdcall

使用DLL的唯一方法是获取其头文件(.h)或Delphi导入单元。.h文件可以转换为导入单位。如果您只有一个DLL,但没有这些DLL,那么尝试猜测函数的参数就没有多大意义

如果您使用TDUMP.exe或Dependency Walker查看DLL,您可能会得到一个提示,如另一个答案中所述。依赖于例如MSVCRTXX.DLL可能是一个很好的提示,它是一个C++ DLL。 您还可以尝试从DLL获取.tlb。您可以在IDE中执行此操作(从内存:“组件菜单”-“导入组件”等)

如果你想知道呼叫约定,请阅读,特别是关于找出呼叫约定的部分

添加


<>一些C++程序员忘记在<代码>外部“C”< /Cux>块中包装声明,因此导出的函数被损坏。这可以告诉您需要哪些参数,但您会得到难看的名称。对于这一点,Dependency Walker是一个很大的帮助,因为它可以翻译它们(至少对于VC++生成的或兼容的DLL)。不过,它使用了来自不同C++编译器或C编译器的函数,但是,我不认为有一种简单的方法来检查DLL并确定调用约定。此外,您可以从C++导出C函数,但是不能导出类(并且期望编译器之间的任何兼容性,甚至是同一编译器的不同版本或版本)可能复制您想要做的事情。你不应该关心,甚至不需要知道你链接到的DLL是用什么语言实现的。我想说的是,这里的关键是调用DLL的应用程序可能正在寻找特定的VTable作为导出,因此它可能无法工作。在DLL示例中查找“修饰名称”。这样的设计很差,但并不少见。但是IIRC不知道它是否是C++ DLL。好的,调用msvcrt可能是一个提示,但不一定是。我也写过使用它的Delphi代码。DLL应该是语言无关的。您只需要知道导出函数的名称和参数r/return types.dll应该是,但通常不是,特别是如果它们是由只懂其语言的人创建的。我已经帮助翻译了很多没有翻译的DLL。