gpt4 book ai didi

delphi - 将二进制数据传递给 D7 中的 dll 函数

转载 作者:行者123 更新时间:2023-12-03 15:23:59 26 4
gpt4 key购买 nike

任何人都可以为我提供传递任意数量字节的工作示例吗通过参数传递给dll函数?

我希望不需要任何额外的内存单元,只在基本的 Windows 类型上操作。

每次调用我需要“发送”大约 300 kb 的数据。

客户端分配的内存也应该在客户端释放吗?

最佳答案

DLL 函数应如下所示:

procedure Test(Buffer: Pointer; Length: Integer); stdcall;
begin
//Buffer points to the start of the buffer.
//The Buffer size if Length bytes.
end;

假设您从另一个 Delphi 模块调用它,该调用可能如下所示:

procedure Test(Buffer: Pointer; Length: Integer); stdcall; external 'test.dll';

procedure CallTest;
var
Buffer: array of Byte;
begin
SetLength(Buffer, 1000);
//populate Buffer
Test(@Buffer[0], Length(Buffer));
end;

最好定义一个需要在同一模块中分配和释放内存的接口(interface)。

上面的示例在调用者的模块中分配和释放。这意味着 Test 方法要么必须在返回之前完全处理 Buffer,要么在返回之前获取 Buffer 内容的副本。

现在,虽然可以在被调用者的模块中进行分配和释放,但这种情况不太常见。这种情况不太常见,因为这样做通常不太方便。它通常需要更多的 API 函数,或者可能更复杂的接口(interface)。当调用者无法确定缓冲区的适当大小时,您将被插入被调用者分配的路线。

当数据从调用者传递到被调用者时,调用者分配始终是最佳选择。当数据流向另一个方向时,被调用者分配更有可能是合适的。

关于delphi - 将二进制数据传递给 D7 中的 dll 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9296054/

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