C++;要从Delphi调用的dll函数-数组参数 我需要编写C++ DLL函数,其中一个参数是数组。但是他的函数也将从Delphi代码中调用。所以我假设我不能只写std::vector或std::array。 我现在已经开始读关于Delph的书了,但是也许一些好的灵魂会在这里告诉我正确的解决方案:)
数组不给出元素的数量。因此,必须在进一步的参数/路线中提供该编号 字符串是指针。因此,该值是间接传递的。在C++中不存在Delphi字符串。常见的类型是PChar/LPWSTR 有必要找出哪种语言将提供内存以及何时释放内存。调用何时离开作用域?Delphi无法释放内存,但必须读取值从调用C++后的内存。C++;要从Delphi调用的dll函数-数组参数 我需要编写C++ DLL函数,其中一个参数是数组。但是他的函数也将从Delphi代码中调用。所以我假设我不能只写std::vector或std::array。 我现在已经开始读关于Delph的书了,但是也许一些好的灵魂会在这里告诉我正确的解决方案:),c++,arrays,c++11,delphi,dll,C++,Arrays,C++11,Delphi,Dll,数组不给出元素的数量。因此,必须在进一步的参数/路线中提供该编号 字符串是指针。因此,该值是间接传递的。在C++中不存在Delphi字符串。常见的类型是PChar/LPWSTR 有必要找出哪种语言将提供内存以及何时释放内存。调用何时离开作用域?Delphi无法释放内存,但必须读取值从调用C++后的内存。 在数组的情况下,你必须在通知C++之后释放内存。另一种方法是传递回调方法。调用模块(Delphi)可以通过回调连续构建数组本身 Delphi函数默认使用寄存器生成。因此,将函数原型切换到st
在数组的情况下,你必须在通知C++之后释放内存。另一种方法是传递回调方法。调用模块(Delphi)可以通过回调连续构建数组本身
Delphi函数默认使用寄存器生成。因此,将函数原型切换到stdcall
type TFunc = function(var arr: integer; NewCount: integer): boolean; stdcall;
第一个数组元素的地址通过参数提供。因此,增加读取指针以读取下一个数组元素
var
Li : integer;
LpLfd : PInteger;
//lplfd : PInteger absolute arr;
begin
SetLength(Result, NewCount);
LpLfd := @arr; //instead of absolute
for Li := 0 to Pred(NewCount) do
begin
Result[Li] := LpLfd^;
inc(LpLfd, 1);
end;
end;
传递指向内存缓冲区的指针和该缓冲区的大小。定义有关谁分配和释放缓冲区(调用者或被调用者)的规则。为方便起见,请使用普通内存和magic附带的从不依赖于语言的类型。提供一个示例,说明为什么它必须是数组。@AndreasRejbrand Length通常比size@DavidHeffernan:我同意,应该是长度。这里有一个链接,指向一个你可能会发现非常有用的网站:“Delphi函数默认使用cdecl生成。”不,默认值是
register
@AndreasRejbrand谢谢