关于VB调用C++dll的回调函数的问题

wjl_can 2014-10-29 02:24:38
VB中调用C++的dll,有回调函数
定义如下
typedef void(__stdcall *ITest)(wchar_t *p, wchar_t *q);
该回调函数给程序传奇了2个whcar_t指针;
在vb中要如何定义该回调函数的原型,才能正确接收回调出来的数据?
我现在在VB中定义的原型如下:
Public Delegate Sub DelegateTestCB(ByVal p As String, ByVal q As String)
回调出来的数据中只有一个字节。。
有没有路过知道的朋友,,该原型要如何定义,才能接收到完整的数据。
...全文
364 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29129009 2016-07-29
  • 打赏
  • 举报
回复
引用 楼主 wjl_can 的回复:
VB中调用C++的dll,有回调函数 定义如下 typedef void(__stdcall *ITest)(wchar_t *p, wchar_t *q); 该回调函数给程序传奇了2个whcar_t指针; 在vb中要如何定义该回调函数的原型,才能正确接收回调出来的数据? 我现在在VB中定义的原型如下: Public Delegate Sub DelegateTestCB(ByVal p As String, ByVal q As String) 回调出来的数据中只有一个字节。。 有没有路过知道的朋友,,该原型要如何定义,才能接收到完整的数据。
我是新手!完全没看懂!我也是刚学vb的,求指点啊!怎么声明封装的啊!求原理
wjl_can 2014-11-02
  • 打赏
  • 举报
回复
问题解决,,非常感谢wy24789
wjl_can 2014-11-02
  • 打赏
  • 举报
回复
引用 6 楼 spt_petrolor 的回复:
没玩过vb.net vb6要是回调,对于这样的原型 typedef void(__stdcall *ITest)(wchar_t *p, wchar_t *q); 似乎应该把下面的vbval修改为byref。 不知道vb.net里面byval,byref是否和vb6相同,算我乱猜的。 Public Delegate Sub DelegateTestCB(ByVal p As String, ByVal q As String) Public Delegate Sub DelegateTestCB(ByRef p As String, ByRef q As String)
谢谢你的恢复,,这样不行,,回调中得不到想要的数据。 指针要转换成VB。net中intPtr,再用Marshal来转换
wjl_can 2014-11-02
  • 打赏
  • 举报
回复
引用 5 楼 wy24789 的回复:
Dim s As String s = System.Runtime.InteropServices.Marshal.PtrToStringUni(p1) 试试
嗯,,谢谢,,这样可以,,不过原型要改成 如下: Public Delegate Sub DelegateTestCB(ByVal p As IntPtr, ByVal q As IntPtr) 非常感谢
王二.麻子 2014-11-01
  • 打赏
  • 举报
回复
没玩过vb.net vb6要是回调,对于这样的原型 typedef void(__stdcall *ITest)(wchar_t *p, wchar_t *q); 似乎应该把下面的vbval修改为byref。 不知道vb.net里面byval,byref是否和vb6相同,算我乱猜的。 Public Delegate Sub DelegateTestCB(ByVal p As String, ByVal q As String) Public Delegate Sub DelegateTestCB(ByRef p As String, ByRef q As String)
wjl_can 2014-10-31
  • 打赏
  • 举报
回复
搞C++的没弄过vb,,不懂里面的道道,没有指点一下么
wy24789 2014-10-31
  • 打赏
  • 举报
回复
Dim s As String s = System.Runtime.InteropServices.Marshal.PtrToStringUni(p1) 试试
wjl_can 2014-10-30
  • 打赏
  • 举报
回复
引用 2 楼 wy24789 的回复:
这是vb吗,好像没这个Delegate 是vb.net? Public Delegate Sub DelegateTestCB(ByVal p As long, ByVal q As long) 把它按指针访问
对是vb.net 这样声明后,怎么样才能把这个指针转换成字符串?
wy24789 2014-10-30
  • 打赏
  • 举报
回复
这是vb吗,好像没这个Delegate 是vb.net? Public Delegate Sub DelegateTestCB(ByVal p As long, ByVal q As long) 把它按指针访问
wjl_can 2014-10-30
  • 打赏
  • 举报
回复
没有路过的朋友指点一下么

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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