导航
  • 主页
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API
  • 问答

请教: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总是只取到数组中的第一个,各位还有什么办法没有,我弄拉很久拉
...全文
177 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
顶起,请各路英雄指点指点
回复
发动态
发帖子
VB
创建于2007-09-28

1.5w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
申请成为版主
社区公告
暂无公告