Delphi如何将二进制数据传递给D7 DLL函数实现?

更新于
2026-10-03 09:51:10
1阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计480个文字,预计阅读时间需要2分钟。

如何为某人提供任意数量的字符节工作示例?通过参数到一个DLL函数?我想在没有额外内存单单元的情况下完成它,只需在基本的Windows类型上运行即可。我需要每次调用时都能执行‘发送’操作。

任何人都可以为我提供传递任意数量字节的工作示例
通过参数到一个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;

总是优选的是定义一个接口,该接口要求在同一模块中分配和释放存储器.

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

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

当数据从调用者传递给被调用者时,调用者分配总是最佳选择.当数据在另一个方向上流动时,被调用者分配更可能是合适的.

标签:DLL

本文共计480个文字,预计阅读时间需要2分钟。

如何为某人提供任意数量的字符节工作示例?通过参数到一个DLL函数?我想在没有额外内存单单元的情况下完成它,只需在基本的Windows类型上运行即可。我需要每次调用时都能执行‘发送’操作。

任何人都可以为我提供传递任意数量字节的工作示例
通过参数到一个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;

总是优选的是定义一个接口,该接口要求在同一模块中分配和释放存储器.

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

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

当数据从调用者传递给被调用者时,调用者分配总是最佳选择.当数据在另一个方向上流动时,被调用者分配更可能是合适的.

标签:DLL