c++ - 要从 Delphi 调用的 C++ dll 函数 - 数组参数
问题描述
我需要编写 C++ dll 函数,参数之一是数组。但他的函数也会从 Delphi 代码中调用。所以我假设我不能只写 std::vector 或 std::array。我现在已经开始阅读有关 Delph 的内容,但也许一些好心人会在这里为我指出正确的解决方案:)
解决方案
数组没有给出其元素的数量。因此,必须在另一个参数/路由中提供该编号。
字符串是指针。因此,该值是间接传递的。C++ 中不存在 Delphi 字符串。常见的类型是 PChar/LPWSTR。
Generell 有必要找出哪种语言将提供内存以及何时释放内存。调用何时离开范围?Delphi不能释放内存,调用C++后必须从内存中读取值。
在数组的情况下,您必须事后通知 C++ 可以释放内存。另一种方法是传递一个回调方法。调用模块(Delphi)可以通过回调依次构建数组本身。
Delphi 函数默认使用 register 生成。因此将函数原型切换到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;
推荐阅读
- mysql - 关于划分两个 MySQL 表列的非常基本的问题
- mysql - 无法解析 ActiveRecord::StatementInvalid: Mysql2::Error: Duplicate key name 'index_users_on_email'
- python - 如何在 Python 脚本中包含 Jmol 控制台脚本
- html - 如何将循环外的每个数组值转换为模态?
- r - 如何使用 geom_col 在 x 轴上添加 0 个计数?
- google-colaboratory - colab pro plus 每次都崩溃
- css - 为什么通过选择器(selector-no-qualifying-type)限定类有问题?
- android - 尝试访问 nativeLibraryDir 时出错
- android - 如何处理配置错误的频道?
- python - Power BI:如何使用 Python Pandas 创建与原始表不同的表