我正在使用 Delphi 加载一个 dll(我在 Delphi XE-3 中创建),以便与一些 C 代码进行交互。我的问题是弄清楚为什么我的数组没有被传递给 c 函数——它们是唯一不传递的。delphi 文件(简化)如下所示:
program CallcCode
uses
SysUtils, Windows,
DLLUnit in 'DLLUnit.pas'; // Header conversion
var
DLLHandle: cardinal;
n: Integer;
A: TArray<Integer>;
result1: Integer;
begin
// Initialize each Array
SetLength(A,n);
A[0] = ...;
// Load the DLL (and confirm its loaded)
DLLhandle := LoadLibrary('dllname.dll');
if DLLhandle <> 0 then
begin
result1 := dll_func1(n,A); // A and B are not passed correctly
end
FreeLibrary(DLLHandle);
end.
我第一次成功“Trace into” dll_func1,进入DLLUnit,它有:
const
nameofDLL = 'dllname';
function dll_func1(n: Integer; A: TArray<Integer>): Integer; cdecl; external nameofDLL;
再次“Tracing-into”,我到达了 c 文件,它仍然具有正确的 n 和 DLLdefs 值,但是 A(在“局部变量”标题下)变成了:
[-] A :(Aplha-Numeric)
..[0] 0 (0x00000000)
我知道我至少可以正确访问 DLL(希望如此),因为其他函数调用可以正常工作,并且我能够毫无问题地跟踪到 dll_func1.c 文件。我尝试将功能更改为
function dll_func1(n: Integer; A: PInteger): Integer; cdecl; external nameofDLL;
...
result1 := dll_func1(n,PInteger(A))
或者
function dll_func1(n: Integer; A: PInteger): Integer; cdecl; external nameofDLL;
...
result1 := dll_func1(n,@A[0])
(同时使用 TArray 和整数或 A 数组)但没有变化,这让我相信这与我没有看到的问题有关。整个事情编译并运行,但由于 TArray 失败,结果 1 不正确。关于出了什么问题的任何想法?
编辑C 中的函数为:
int dll_func1(int n, int A [])