对于我们的Delphi(XE5)应用程序,我们正在开发一个API。为了与主程序(基于C;(控制台)C或C ++代码应用程序或Matlab和Simulink)传递来自Delphi DLL函数的数据,需要由调用方分配的双精度数填充数组。
我知道开放式数组(特定于Delphi)在此用途上不是很方便,因为它们包含您随后必须在C中模仿的其他数据。相反,我计划inc(APDouble)通过直接指向正确的指针来使用指针算术(请参见dll函数:)。地址。我的问题是,这是否是您的软件开发人员将如何执行此操作。
下面包括一个演示(完整源代码)。
DLL(在DXE5中制作):
library PDA;
uses
System.StrUtils,
System.SysUtils,
Vcl.Dialogs;
{$R *.res}
function ShowArrayContents( APDouble: PDouble;
size: Integer): integer; cdecl; export;
var
i: Integer;
begin
Result := 0;
for i := 0 to size-1 do
begin
// Show value!
MessageDlg(Format('%p -> %p -> %f', [@APDouble, APDouble, APDouble^]), mtWarning, [mbOK], 0);
Inc(APDouble);
end;
end;
exports
ShowArrayContents;
begin
end.
Run Code Online (Sandbox Code Playgroud)
C代码调用程序(在C ++构建器XE4中制成):
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <windows.h>
typedef int (*_ShowArrayContents) (double *, int);
char *dllname = …Run Code Online (Sandbox Code Playgroud)