vb.net不能调用VC.NET写的DLL?请高人帮我看看~~~

huafeihua116 2008-12-17 04:00:17
是这样的 我的VB.net代码是从VB升级过来的 并且要调用的DLL原本是VC写的··我把VC代码也升级到VC.NET然后编译成DLL文件 放到VB.NET工程的bin目录下~
以下是VB.NET代码:

Declare Function WTCRCtrl Lib "WTCR02.DLL" (ByRef typSocket As Socket, ByVal lSendID As Integer, ByRef TypSendStruct As Object, ByRef typRecvStruct() As ShareMemory, ByRef typProcResult As ProcResult) As Integer '通信制御処理

lResult = WTCRCtrl(typSocket, pubcszNinshouInfoR, typSecurty, udtShareMemory, typProcResult)

当程序跑到上面这段时 直接走ErrorHandler了~
应用程序错误:
错误号  5
错误发生函数 WMMI001.cmdOK_Click
错误原因 值不存在有效范围

DLL错误
LastDllEroor 203


我开始认为是不是我的WTCRCtrl()里参数是否有错误··并且打开老的VB代码一个个的对应每个参数里值  都是一样的·但是VB却可以通过往下走。。。。
现在不知道问题出在哪里?还请高手点拨点拨 谢谢大家了~~~
...全文
117 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsh2216024 2008-12-18
  • 打赏
  • 举报
回复
用原來VC的DLL試試,看行不行
huafeihua116 2008-12-17
  • 打赏
  • 举报
回复
嗯··我刚又检查了下各个参数的声明和定义

其中一条感觉有点怪怪的~
lResult = WTCRCtrl(typSocket, ......)
VB.net代码:
Public typSocket As Socket

Public Structure Socket
Dim lSocketHandle As Integer

<VBFixedString(20),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray,SizeConst:=20)> Public szUserID() As Char 'ID(固定長)
End Structure


VB代码:
Public Type Socket
lSocketHandle As Long
szUserID As String *20 'ID(固定長)
End Type
sunshine_anycall 2008-12-17
  • 打赏
  • 举报
回复
具体不清楚
不过lz再看下调用dll里的函数的声明方式对不
vb和vb。net已经不是一回事了
sijin 2008-12-17
  • 打赏
  • 举报
回复
Integer
我想应该是数据类型
Visual Basic 6.0 Integer 数据类型现在是 Visual Basic.net Short 数据类型
huafeihua116 2008-12-17
  • 打赏
  • 举报
回复
额 回2楼的朋友··在VB里原本都是LONG型的~转化后 升级向导把它转化为INTEGER型了··我觉得这样是合理的啊~~
huafeihua116 2008-12-17
  • 打赏
  • 举报
回复
补充下:貌似程序根本就没进WTCR02.DLL 因为我在WTCR02.DLL的入口处设置了个LOG打印信息~如果访问进去了 日志文件上应该是会被打印到的~~~
CloneCenter 2008-12-17
  • 打赏
  • 举报
回复
VB6和VB.NET中的一些数据类型的长度是不同的。
例如,vb6中integer是16位的,在.net中,integer是32位的。

16,718

社区成员

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

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