use*_*144 4 delphi dll delphi-7
任何人都可以为我提供通过参数将任意数量的字节传递给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;
Run Code Online (Sandbox Code Playgroud)
假设您从另一个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;
Run Code Online (Sandbox Code Playgroud)
总是优选的是定义一个接口,该接口要求在同一模块中分配和释放存储器.
上面的示例在调用者的模块中分配和释放.这意味着该Test方法要么必须Buffer在返回之前完全处理,要么在返回之前获取内容的副本Buffer.
现在,虽然可以在被调用者的模块中进行分配和释放,但这种情况并不常见.它不太常见,因为这样做通常不太方便.它通常需要更多的API函数,或者更复杂的接口.当调用者无法确定缓冲区的适当大小时,您将被推入被调用者分配的路由.
当数据从调用者传递给被调用者时,调用者分配总是最佳选择.当数据在另一个方向上流动时,被调用者分配更可能是合适的.
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |