麻烦大师帮我查错,将一段VB声明如何转换成DELPHI代码

yangtou 2017-04-07 11:53:11
VB代码
函数声明
private Declare Function WriteDataMulti Lib "VestoreForVb.dll" (sPointName() As String, ByRef dValue As Double, ByRef lTime As Long, ByVal lCount As Long) As Long
Dim lTag(2) As String
Dim lValue(2) As Double
Dim lTime(2) As Long
lTag(0) = "a"
lTag(1) = "b"
lTag(2) = "c"

lValue(0) = 123
lValue(1) = 234
lValue(2) = 345

lTime(0) = fCalDateLong(Now)
lTime(1) = fCalDateLong(Now)
lTime(2) = fCalDateLong(Now)

If WriteDataMulti(lTag(), lValue(0), lTime(0), 3) = 1 Then
MsgBox ("成功")
End If
在VB下调用正常


DELPHI代码
function WriteDataMulti(sPointName:pointer;var dValue:double;var lTime:longint;lCount:longint):longint;stdcall;external libname;

lTag:array of string;
lValue:array of double;
lTime:array of longint;
并且用setlength对这三个数组进行了赋值
Ret:=WriteDataMulti(@lTag, @lValue[0], @lTime[0], count);
结果报错,提示Extenal exception E0607363这样的错误,我已经检查过这三个数组均设好了正确的数据
怀疑声明或调用不对,请大师指点,在线等。

...全文
298 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 yangtou 的回复:
函数C++的原型是
int _stdcall WriteDataMulti(SAFEARRAY **psPointName,double *dValue, long *lTime,long count)
大家帮我看看怎么调用才正常。


uses WinApi.ActiveX;

function WriteDataMulti(var psPointName: PSafeArray; var dValue: double; var lTime: longint; count: longint): integer; stdcall; external 'VestoreForVb.dll';
yangtou 2017-04-07
  • 打赏
  • 举报
回复
函数C++的原型是 int _stdcall WriteDataMulti(SAFEARRAY **psPointName,double *dValue, long *lTime,long count) 大家帮我看看怎么调用才正常。

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧