vb.net 调用 ocx 控件的问题

cb 2005-03-24 01:09:16
vb.net 调用 ocx 控件的问题

我有一个 ocx 控件,使用 C++builder Delphi VC VB6

等程序调用其中的函数,都没有问题,

但是现在要在 vb.net 下调用却始终不能通过

函数说明如下

BOOL GetData(Long FAR* d1 ,
Long FAR* d2 ,
Long FAR* d3 );


在 vb6 中调用方法如下,而且成功,没有任何问题

Dim d1(0) As Long
Dim d2(512) As Long
Dim d3(0) As Long
ActiveX_xxx.GetData(d1(0),d2(0),d3(0))

可是在 vb.net 下却程序意外退出.

据说是因为 vb6 是传值与传址的,而 vb.net 都是传址的,

所以 d2(0) 这样的写法有问题

请问哪位大侠可以解决这个问题.当然是在不改动 ocx 控件的情况下.
...全文
349 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cb 2005-03-31
  • 打赏
  • 举报
回复
to 他乡之客

改成 ActiveX_xxx.GetData(ObjPtr(d1(0)),ObjPtr(d2(0)),ObjPtr(d3(0)))

仍然是执行到这句就程序中止了
captain_lww 2005-03-28
  • 打赏
  • 举报
回复
你把这三个地址都传进去试试
cb 2005-03-28
  • 打赏
  • 举报
回复
to 他乡之客

现在的现象是不提示任何错误,程序直接跳出了

就在 ActiveX_xxx.GetData(d1(0),ObjPtr(d2(0)),d3(0)) 这行语句处
captain_lww 2005-03-26
  • 打赏
  • 举报
回复
对了,把函数的改为Integer 而不是 Long

Private Declare Function ObjPtr Lib "MSVBVM60" Alias "VarPtr" (var As Object) As Integer
cb 2005-03-26
  • 打赏
  • 举报
回复
to 他乡之客
提示错误:

未处理的“System.OverflowException”类型的异常出现在 FD_900_TEST.exe 中。

其他信息: 算术运算导致溢出。

按其他人的方法错误依旧,没有任何提示,程序就意外中止了.
boxter110 2005-03-25
  • 打赏
  • 举报
回复
Dim d1(0) As integer
Dim d2(512) As integer
Dim d3(0) As integer

数组长度是不是有问题?
改成:
ActiveX_xxx.GetData(d1(),d2(),d3())
怎么样?
cb 2005-03-25
  • 打赏
  • 举报
回复
定义成 Integer 试过了,

也不成,错误依旧
weiljj 2005-03-25
  • 打赏
  • 举报
回复
Dim d1(0) As int32
Dim d2(512) As int32
Dim d3(0) As int32
ActiveX_xxx.GetData(d1,d2,d3)
captain_lww 2005-03-25
  • 打赏
  • 举报
回复
Private Declare Function ObjPtr Lib "MSVBVM60" Alias "VarPtr" (var As Object) As Long

ObjPtr(d2(0))作用是返回d2(0)的地址,然后把地址传进去看看
boxter110 2005-03-24
  • 打赏
  • 举报
回复
vb.net中定义为:
Dim d1(0) As integer
Dim d2(512) As integer
Dim d3(0) As integer
ActiveX_xxx.GetData(d1(0),d2(0),d3(0))

是一是!.net里的integer和VB6里的integer 不大一样

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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