如何将C++头文件转换为delphi

Posted

技术标签:

【中文标题】如何将C++头文件转换为delphi【英文标题】:How to convert C++ header file to delphi 【发布时间】:2015-08-25 05:38:30 【问题描述】:

我正在将 C++ 标头转换为 delphi pas 文件。首先,我使用 Dr.Bob 模块中的 HeadConv 4.0 转换了 C++ 头文件。但它编译失败。 任何人都可以帮助进行这种转换吗?

****** C++ 头文件 ******

#if !defined(____KKK_Module__)

#define ____KKK_Module__

#ifdef KKK_MODULE_EXPORTS

#define KKK_MODULE_API extern "C" __declspec(dllexport)

#else

#define KKK_MODULE_API extern "C" __declspec(dllimport)

#endif

KKK_MODULE_API int _stdcall KKK_Creat();

......

以上代码是Delphi代码转换后导致的错误如下;

******德尔福代码******

$IFDEF KKK_MODULE_EXPORTS

const 
 KKK_MODULE_API = extern 'C' __declspec(dllexport);  **//error**

$ELSE

const
  KKK_MODULE_API = extern 'C' __declspec(dllimport);  **//error**

$ENDIF

var
  KKK_Creat: function: KKK_MODULE_API INT cdecl  $IFDEF WIN32 stdcall 
$ENDIF;

.........

错误原因是'extern' 不是Delphi 的保留语法。 我不知道如何用 Delphi 代码替换它,需要任何帮助。

【问题讨论】:

没有 C# 头文件之类的东西。你的意思是C++头文件。见***.com/questions/100596/… function KKK_Creat: Integer; stdcall; external 'TheLibrary.dll' name 'KKK_Creat'; HeadConv 完全坏了。使用h2p 我的建议,我已经做了很多标题转换:不要使用自动转换工具。他们中的大多数会为某些标头生成错误或无用的代码。我更喜欢手动转换,借助 my Conversion Pack 和 IDE 的一些 macr 记录工具。这工作得很好,并且可以快速产生坚如磐石的翻译尝试阅读我关于这个的文章(Pitfalls of converting)。 【参考方案1】:

那不是 C#,是 C++。

条件部分是一种非常常见的模式,它允许在构建库和导入库时都使用头文件。您只是在导入,因此不需要翻译该部分。

然后你就只剩下一个函数了:

extern "C" __declspec(dllimport) int _stdcall KKK_Creat();

extern "C" 的使用抑制了 C++ 名称修改。你不翻译那个。

简单地说,您可以使用 external 指令翻译 __declspec(dllimport)

全部翻译成:

function KKK_Creat: Integer; stdcall; external libname;

其中libname 是一个包含DLL 名称的字符串。

您需要检查用于导出函数的名称。如果库是在没有 .def 文件的情况下构建的,则函数名称将被修饰。该函数将命名为KKK_Creat@0。使用 dumpbin 或 Dependency Viewer 等工具检查 DLL 中导出的函数名称。

FWIW,我从未找到有效的通用标题翻译器,并且始终发现最好手动执行此操作,或者编写定制的标题特定翻译器。

【讨论】:

FWIW,如果库是用 .def 文件构建的,则不会修饰名称。 @Rudy 谢谢,这就是我的意思,但把它弄糊涂了

以上是关于如何将C++头文件转换为delphi的主要内容,如果未能解决你的问题,请参考以下文章

如何将 .tlb 文件转换为头文件和实现文件?

c++中如何把string类型转化为float类型

如何在 Delphi 中将带有图像的 RichText (RTF) 文档转换为 HTML?

将 .lib 和 .h 文件转换为 .NET

C语言如何使用其他文件定义的结构体?(C++报错:无法转换到不完整的类需在头文件中定义结构体??)

C++如何将一个存有数据的文本文件转换为二进制文件?