Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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调用的dll函数-数组参数 我需要编写C++ DLL函数,其中一个参数是数组。但是他的函数也将从Delphi代码中调用。所以我假设我不能只写std::vector或std::array。 我现在已经开始读关于Delph的书了,但是也许一些好的灵魂会在这里告诉我正确的解决方案:)_C++_Arrays_C++11_Delphi_Dll - Fatal编程技术网

C++;要从Delphi调用的dll函数-数组参数 我需要编写C++ DLL函数,其中一个参数是数组。但是他的函数也将从Delphi代码中调用。所以我假设我不能只写std::vector或std::array。 我现在已经开始读关于Delph的书了,但是也许一些好的灵魂会在这里告诉我正确的解决方案:)

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字符串。常见的类型是PChar/LPWSTR

有必要找出哪种语言将提供内存以及何时释放内存。调用何时离开作用域?Delphi无法释放内存,但必须读取值​​从调用C++后的内存。

在数组的情况下,你必须在通知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谢谢