请教:VB.NET调用C写的DLL问题

yinweihong 2006-05-08 12:51:11
C,原来是个LIB,加了_stdcall,def文件,EXPORTS四个sub

原型是这样的:
typedef unsigned long ulint;
typedef unsigned char uchr;
short _stdcall m_unpack(void*,ulint,void*,ulint*);
实现中有这么一句:
uchr *ibuf, *obuf;
ulint filesize;

short _stdcall m_unpack(void *src, ulint srclen, void *dst, ulint *dstlen)
{...

ibuf = src;
obuf = dst;
filesize = srclen;
...}
为了方便点,我直接定义成
short _stdcall m_unpack(char*,ulint,char*,ulint*);
short _stdcall m_unpack(char*src, ulint srclen, char*dst, ulint *dstlen)



VB.NET中

Declare Function m_unpack ...(ByRef srcStr As Byte(), ByVal srcLength As Long, ByRef dstStr As Byte(), ByRef dstLength As Long) As Short
传数据时候
ret2 = m_unpack(debuf, deLength, dstStr, filesize)
执行后debuf总是只取到数组中的第一个,各位还有什么办法没有,我弄拉很久拉
...全文
233 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinweihong 2006-05-08
  • 打赏
  • 举报
回复
楼上这位兄弟,我也知道VB里面的第一个代表首地址,,,

还是那个返回直,我kao....


s3yk 2006-05-08
  • 打赏
  • 举报
回复
有是老掉牙的问题!简单啦!有两个方法!
Declare Function m_unpack ...(ByRef srcStr As Byte, ByVal srcLength As Long, ByRef dstStr As Byte, ByRef dstLength As Long) As Short

Declare Function m_unpack ...(ByRef srcStr As Integer, ByVal srcLength As Long, ByRef dstStr As Integer, ByRef dstLength As Long) As Short

然后传送的时候是srcStr的第一个送过去,如srcStr(0)!
yinweihong 2006-05-08
  • 打赏
  • 举报
回复
不知道掉到哪一层去了,顶起
yinweihong 2006-05-08
  • 打赏
  • 举报
回复
忘了说,
void *src, ulint srclen , 是IN的
void *dst, ulint *dstlen OUT的


@alan001(星岛孤裔林郎君) 就这么一句话?


谁能给我解释一下为什么传之前有完整数据,执行之后只剩第一个数据了么?
laidon 2006-05-08
  • 打赏
  • 举报
回复
这个应该是调用C语言的指针类型处理不当的原因吧,你用memorycopy试试
alan001 2006-05-08
  • 打赏
  • 举报
回复
用Pascal参数顺序
yinweihong 2006-05-08
  • 打赏
  • 举报
回复
请各位给个完整点的方案,直接给点代码告诉我怎么做吧(第一次求代码,哎....),

@farrio(独孤求胜) 我试过了,不行,翻拉N遍GOOGLE了

Declare Function m_unpack ...(ByRef srcStr As IntPtr, ByVal srcLength As Long, ByRef dstStr As IntPtr, ByRef dstLength As Long) As Short
传数据时候
'Dim intPtrA As IntPtr = mar.AllocHGlobal(deLength)
'Dim intPtrB As IntPtr = mar.AllocHGlobal(filesize)
'mar.Copy(debuf, 0, intPtrA, debuf.Length)

ret2 = m_unpack(IntPtrA, deLength, IntPtrB, filesize)
......
farrio 2006-05-08
  • 打赏
  • 举报
回复
不是很清楚。用IntPtr定义看看能不能行。
yinweihong 2006-05-08
  • 打赏
  • 举报
回复
顶起,请各路英雄指点指点

16,722

社区成员

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

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