【发布时间】:2023-03-30 12:55:02
【问题描述】:
我仍在从 DLL 过程中学习,由于不存在 Delphi FTDI Libmpsse 库,我必须从头开始使用 DLL。
但是,我在 Delphi 中远非完美! 我已经使用它几年了,没有接触过指针。
这是我现在坚持的特定行(这是我试图翻译的内容):
function I2C_DeviceWrite(
handle :dword;
deviceAddress :uint32;
sizeToTransfer :uint32;
out buffer :byte;
out sizeTransferred :uint32;
options :uint32
):FT_Result; cdecl; external 'libmpsse.dll';
来自 API 用户指南,它是这样描述 C 方式的:
FT_STATUS I2C_DeviceWrite(
FT_HANDLE handle,
uint32 deviceAddress,
uint32 sizeToTransfer,
uint8 *buffer,
uint32 *sizeTransferred,
uint32 options )
根据我的理解,Asterix 表示 C 中的指针。
我还不知道如何正确声明它们。
有什么提示吗?
注意:我仍在阅读(XE2 基础)并尽我所能搜索指针和缓冲区!
谢谢!
顺便说一句,API 指南在这里供参考:PDF from FTDI
编辑:
var
Buffer: array of Byte;
written,towrite:cardinal;
begin
SetLength(Buffer,I2C_DEVICE_BUFFER_SIZE);
buffer[0] := $07;
towrite := 1;
i2c_openchannel(1,FT_HANDLE); //open channel 1
i2c_initchannel(FT_HANDLE,I2C_CLOCK_STANDARD_MODE and LATENCY_TIMER and 0);
i2c_devicewrite(FT_HANDLE,I2C_DEVICE_ADDRESS,towrite,buffer,written,I2C_TRANSFER_OPTIONS_START_BIT);
i2c_closechannel(FT_HANDLE); //close device
到目前为止一切正常,除了 i2c_devicewrite 行!
它给了我 E2033:无法编译实际和正式的 var 参数必须相同
【问题讨论】:
-
OT:定义
FT_HANDLE的类型;使用原始代码中的数据类型(UInt32类型在 Delphi 中存在一段时间)。 -
红衣主教不一样? FT_HANDLE 在我的代码中是这样定义的: Var --> FT_HANDLE : DWord = 0;//API 中它必须始终为 0
-
如果原始代码要求
uint32,则声明您的类型为uint32,您不必担心cardinal是否相同。如果类型已经在 Delphi 中声明,使用已经声明的类型。用户指南中的FT_HANDLE是如何确切定义的? -
FT_Handle 被定义为一个 DWORD。谢谢你的提示!相应地编辑了我的问题。
-
另一个无耻的提示:我的文章Pitfalls of converting 描述了大部分内容。另请阅读Addressing pointers。
标签: function delphi pointers dll buffer