gpt4 book ai didi

delphi - 如何将 "array of"参数转换为 C++?

转载 作者:行者123 更新时间:2023-12-03 15:49:02 28 4
gpt4 key购买 nike

我正在为我们的游戏引擎(使用 Delphi XE 制作)开发 C++ 语言绑定(bind)。如何将OleVariant 数组const 数组 参数转换为在C++ 端正常工作?

function  DLM_CallRoutine(const aFullname: PWideChar;
const aParamList: array of OleVariant): OleVariant; stdcall;

function DLM_CreateObject(const aClassName: PWideChar;
const aParamList: array of const): Integer; stdcall;

谢谢。

最佳答案

Delphi 有两个完全独立的数组语义,它们都使用相同的 array of用于不同目的的代码语法。

何时 array of用于声明数据类型或变量, Dynamic Array正在使用,例如:

type
TIntegerArray: array of Integer;

var
Array1: TIntegerArray;
Array2: array of Integer;

在 C++ 中,这些对应于 DynamicArray<T>模板类,例如:

typedef DynamicArray<int> TIntegerArray;

TIntegerArray Array1;
DynamicArray<int> Array2;

另一方面,当 array of直接在函数参数中使用(即不使用 typedef),然后是 Open Array正在被使用,即:

procedure DoSomething(Arr: array of Integer);
procedure DoSomethingElse(Arr: array of const);

编译器使用两个单独的参数传递传递给开放数组参数的值 - 指向实际数组的指针和数组中最后一个元素的索引。 Delphi 隐藏了这一事实,因此编码员只能看到一个参数,并提供了一种简单的语法来指定参数值:

DoSomething([12345, 67890]);
DoSomethingElse(['Hello', 12345, True]);

然而,在 C++ 中,用于数组的两个参数是显式声明的,并且通常使用 OPENARRAY() 指定值。和ARRAYOFCONST()宏,例如:

// despite their names, the Size parameters are actually indexes.
// This misnaming has already been slated to be fixed in a future
// C++Builder release...
void __fastcall DoSomething(int const *Arr, const int Arr_Size);
void __fastcall DoSomethingElse(TVarRec const *Arr, const int Arr_Size);

DoSomething(OPENARRAY(int, (( 12345, 67890 )) );
DoSomethingElse(ARRAYOFCONST(( "Hello", 12345, true )) );

关于delphi - 如何将 "array of"参数转换为 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635085/

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