gpt4 book ai didi

c++ - 通过引用将数组从 Delphi 7 传递到 C++ Dll

转载 作者:搜寻专家 更新时间:2023-10-31 00:16:15 25 4
gpt4 key购买 nike

这是通过 DLL 公开的 C++ 函数:

double my_exposed_cpp_function(int* my_array){
int i = my_array[2]; /* i should be 3 */
my_array[2]++;
return 0;
}

这是我的 Delphi 函数的声明

function dll_function(var my_array: array of integer): Real; stdcall; external myDLL name 'my_exposed_cpp_function';

这是我想在 Delphi 函数中做的事情

procedure talk_to_dll();
var
return_value: Real;
my_array: array[0..2] of integer;
final_value: integer;
begin
my_array[0] = 1;
my_array[1] = 2;
my_array[2] = 3;
return_value := dll_function(my_array);
final_value = my_array[2]; /* my_array[2] should now be 4 */
end;

希望这个例子能说明我的意图。我可以使用这个设置来处理更简单的数据类型,所以我知道 Delphi 和 dll 之间的通信很好。我需要更改什么才能使其正常工作?

最佳答案

Delphi 开放数组实际上使用两个参数传递:第一个元素的地址和元素计数减一。

要调用 C++ 函数,您不能使用开放数组。简单地将函数声明为接收指向第一个元素的指针:

function dll_function(my_array: PInteger): Real; stdcall; 
external myDLL name 'my_exposed_cpp_function';

这样调用它:

return_value := dll_function(@my_array[0]);  

在某些时候,您可能希望让数组长度动态变化。就目前而言,代码假定数组具有三个元素。为了更通用,您将传递一个额外的参数来指定数组长度。

我假设 C++ 函数确实是 st​​dcall,尽管问题中没有明确说明这一点。

关于c++ - 通过引用将数组从 Delphi 7 传递到 C++ Dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16795036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com