vb调用DLL转成DELPHI出错?

1.原来VB的程序,经执行可以通过
VB
数据类型定义
'Profile infomation
Public Type LJIF_PROFILE_INFO
fXStart As Single
fXPitch As Single
End Type
定义
Public Declare Function LJIF_GetProfileData Lib "LJIF.dll" (ByVal ProfileTarget As Long, ByRef pProfileInfo As LJIF_PROFILE_INFO, ByRef pProfile As Single, ByVal nCount As Long) As Long
条用
rc = LJIF_GetProfileData(LJIF_HEAD_INDEX(GetProfileParam1.ListIndex), ProfileInfo, pBuffer(0), GetProfileParam2)
'Get Profile Data
2.改成DELPHI后,就这个函数提示参数错误
DELPHI
定义
Type
pLJIF_PROFILE_INFO=^LJIF_PROFILE_INFO;
LJIF_PROFILE_INFO=record
fXStart : Single;
fXPitch : Single;
End ;
/Get Profile Data
Function LJIF_GetProfileData ( ProfileTarget:LongInt; var pProfileInfo: LJIF_PROFILE_INFO;var pProfile:array of Single; nCount :LongInt): LongInt;external 'LJIF.dll';
调用:
rc := LJIF_GetProfileData(0, ProfileInfo, pBuffer, GetProfileParam2.Value) ;
始终报参数错误?
求大侠指点!

3个回答

 VB中 ByRef pProfile As Single这是按地址传一个single
 但看你delphi中定义
 var pProfile:array of Single  这定义的是一个数组

回楼上,我参考了原定义,将函数定义和引用改成下面的形式,还是报错!
定义
Function LJIF_GetProfileData ( ProfileTarget:LongInt; var pProfileInfo: pLJIF_PROFILE_INFO;var pProfile:Single ; nCount :LongInt): LongInt;external 'LJIF.dll';

调用:
var
pBuffer:array[0..1600] of Single ;
rc := LJIF_GetProfileData(0, ProfileInfo, pBuffer[0], GetProfileParam2.Value) ;
可还是报错?

function LJIF_GetProfileData(ProfileTarget: longint; pProfileInfo: pLJIF_PROFILE_INFO;pProfile: PSingle;nCount: integer): longint;stdcall;{这里是stdcall还是cdecl看这个函数的文档
Delphi中是需要加上调用规则的,不然默认的就是Register模式的调用规则,这个狠重要}
至于ByRef pProfile As Single,这个就是一个数组指针,比如你的是M: array[0..2] of Single;那么传递@M[0]就行了。
试试

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问