Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何转换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 - Fatal编程技术网

如何转换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的头文件 < >我将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

以上代码转换为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的保留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谢谢,这就是我想说的,但是弄错了