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(__fastcall在C++ Builder中),而C和C++默认使用cdecl.但通常两种语言都应该使用stdcall.
使用DLL的唯一方法是获取头文件(.h)或Delphi导入单元..h文件可以转换为导入单元.如果你只有一个DLL但没有这些,那么尝试猜测函数的参数没有多大意义.
如果您使用TDUMP.exe或Dependency Walker查看DLL,您可能会得到一个提示,正如另一个答案所述.对例如msvcrtXX.dll的依赖可能是一个很好的提示,它是一个C++ DLL.
您也可以尝试从DLL中获取.tlb.您可以在IDE中执行此操作(从内存:"组件菜单" - "导入组件"或其他一些).
如果你想知道调用约定,请阅读本文,特别是关于找出调用约定的部分.
加成
一些C++程序员忘记将它们的声明包装在extern "C"块中,因此导出的函数会被破坏.这可以告诉你哪些参数是必需的,但你会得到丑陋的名字.为此,Dependency Walker是一个很好的帮助,因为它可以翻译它们(至少对VC++生成或兼容的DLL).但是,它很难使用来自不同C++编译器或C编译器的那些函数.
| 归档时间: |
|
| 查看次数: |
1258 次 |
| 最近记录: |