如何转换C++;delphi的头文件 < >我将C++头转换成Delphi PAS文件。首先,我用鲍伯博士模块的头4来转换C++头。但是编译失败了。 有人能帮忙吗 *C+C++头***/p> #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代码,导致如下错误 ******德尔菲代码******如何转换C++;delphi的头文件 < >我将C++头转换成Delphi PAS文件。首先,我用鲍伯博士模块的头4来转换C++头。但是编译失败了。 有人能帮忙吗 *C+C++头***/p> #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(); ......,c++,delphi,header-files,C++,Delphi,Header Files,以上代码转换为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
{$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的保留syntex。
我不知道如何用Delphi代码替换它,需要任何帮助
条件部分是一种非常常见的模式,允许在构建库和导入库时使用头文件。您只是在导入,因此不需要翻译该部分
然后只剩下一个函数:
extern "C" __declspec(dllimport) int _stdcall KKK_Creat();
<> >使用代码>外部“C”<代码>禁止C++名称的修改。你不能翻译那个
不严格地说,您可以使用外部
指令翻译\u declspec(dllimport)
将其全部翻译为:
function KKK_Creat: Integer; stdcall; external libname;
其中libname
是包含DLL名称的字符串
您需要检查用于导出函数的名称。如果库是在没有.def文件的情况下生成的,则函数名将被修饰。该函数将命名为KKK_Creat@0
。使用dumpbin或Dependency Viewer等工具检查DLL中导出的函数名
FWIW,我从来没有找到一个有效的通用标题转换器,并且总是发现最好手动完成,或者编写一个定制的标题特定转换器 没有C#头文件这样的东西。您的意思是C++头文件。参见函数KKK_create:Integer;stdcall;外部“TheLibrary.dll”名称“KKK_Creat”代码>HeadConv已完全损坏。使用
h2p
。我的建议是,我已经做了很多页眉转换:不要使用自动转换工具。它们中的大多数会为某些标头生成错误或无用的代码。我更喜欢在IDE和一些macr记录工具的帮助下手动转换。这很好,而且很快就产生了坚如磐石的翻译。试着读一下我关于这个()的文章。FWIW,如果这个库是用.def文件构建的,那么这些名称将不会被修饰。@Rudy谢谢,这就是我想说的,但是弄错了