【发布时间】:2011-06-04 14:46:01
【问题描述】:
是否可以使用 Rad Studio XE C++ 编译器编译 C 头文件并将它们与 Delphi 代码链接?
这样就不需要将头文件转换成pascal了?
问题的原因是..
C - 标题定义:
DLLEXPORT int url_engine_version(char *version, size_t length);
尝试德尔福定义
function url_engine_version(version: PByte; var length: cardinal): integer;
cdecl; external 'corplib.dll';
主应用程序尝试使用以下方法调用它:
engVer: Pointer;
engLen: cardinal;
engLen := 64;
GetMem(engVer,engLen);
url_engine_version(engVer,engLen);
但 Delphi AV 在尝试调用例程时。
有效的 C# 定义 - 如果我传递一个预先定义为长度 64 的 StringBuilder,Chick 就可以工作
[DllImport("corplib.dll", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.Cdecl)]
public static extern int url_engine_version(StringBuilder version, [Out] int length);
【问题讨论】:
-
你确定真的是Delphi代码崩溃,而不是DLL函数崩溃? AV 错误信息会告诉你违规代码属于哪个模块。
标签: c delphi header c++builder