[com interop.]VB调用vb.net编写的DLL,部署问题

urmy1004 2011-04-19 05:37:55
我在XP下使用vs2005新建了一个vb--类库,添加com类
vb.net steps:
(1)VB.NET-->类库-->类-->确定
(2)删除class1
(3)添加新项-->COM 类 命名为ComClsDataComm.vb

代码如下:

Option Explicit On

<ComClass(ComClsDataComm.ClassId, ComClsDataComm.InterfaceId, ComClsDataComm.EventsId)> _
Public Class ComClsDataComm
#Region "COM GUID"
' 这些 GUID 提供此类的 COM 标识
' 及其 COM 接口。若更改它们,则现有的
' 客户端将不再能访问此类。
Public Const ClassId As String = "8b99d51c-e932-49a1-a4cc-f8e81fe5e0ff"
Public Const InterfaceId As String = "3a8c331a-fe8f-4ebb-a47c-a5fe85b471ca"
Public Const EventsId As String = "fbb2cc74-26bf-4814-929f-509ff489ca19"
#End Region

' 可创建的 COM 类必须具有一个不带参数的 Public Sub New()
' 否则, 将不会在
' COM 注册表中注册此类,且无法通过
' CreateObject 创建此类。
Public Sub New()
MyBase.New()
MsgBox("new - 1")
If frmData Is Nothing Then
MsgBox("new - 2")
frmData = New FrmDataComm
End If
MsgBox("new - 3")
frmData.Activate()
End Sub

Protected Overrides Sub Finalize()
If Not frmData Is Nothing Then
frmData.Dispose()
frmData = Nothing
End If
Me.Finalize()
End Sub

Public Function dll_DataSend(ByVal intKind As Short, ByVal strData As String _
, ByRef intRet As Short _
, Optional ByVal blnKind As Boolean = True _
, Optional ByVal blnFormModal As Boolean = False) As Boolean
On Error GoTo ERR_Exit

dll_DataSend = False

MsgBox("1")
If frmData.DataSend(intKind, strData, intRet, blnKind, blnFormModal) Then
dll_DataSend = True
End If
MsgBox("2")
Exit Function

ERR_Exit:
MsgBox("error exit")
dll_DataSend = False
intRet = enumProcRslt.RSLT_ERR
Err.Clear()
End Function

Public Sub hello()
MsgBox("hello")
End Sub
End Class





color=#FF0000]同时保证了:1. 程序集里面的comvisible为true
2. 勾上了“为com interop注册”
然后我将编译好的SLDataComm.dll && SLDataComm.tlb一并发给了本地的虚拟机(win2000 + vb6 +新装的.net framework2.0)
[[/color]

虚拟机环境下:
1. 在 “工程 --- 引用 ---- 浏览”之后,添加了我的tlb文件,保存当前的工程设定等修改,关闭vb6(1,2可以互换应该, 我没试过,主要是不想用vs2005导出的tlb~)
2. regasm SLDataComm.dll /tlb /codebase (这个会覆盖掉原来的tlb,生成新的tlb文件,不加codebase选项,vb中直接debug会出错,不知道为什么)
3. 重新打开vb6.0
Dim DataComm as ComClsDataComm
Set DataComm = New ComClsDataComm
DataComm.hello

在VB中直接调试,一切正常!

之后我将生成的exe文件直接拷贝到目标机器上,系统环境为xp+同样版本的。net framework 2.0
注册dll:regasm SLDataComm.dll,并且将该dll引用的一些类库*。dll一并拷入到目标机器的安装目录c:\XX\
运行之后,会有
automation error (-2146232576)

搜索了一圈,相关的帖子还真不少,但是我也不知道怎么回事,都试过了,还是老样子

Any suggestion?
Thx a lot!
...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
urmy1004 2011-06-01
  • 打赏
  • 举报
回复
解决了!
如下:

长话短说,我漏掉了一个隐藏文件,appname.exe.config,不知道他什么时候产生的,而且里面的runtime为1.1,我改为3.5不行(现在这个dll是3.5环境下生成的),改为2.0可以了!@_@~
51Crack 2011-04-20
  • 打赏
  • 举报
回复
regasm后 gacutil -i 加到缓存 试试
dll加强命名试试, keyfile

试过接口方式,没试过直接com
urmy1004 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 51crack 的回复:]

regasm后 gacutil -i 加到缓存 试试
dll加强命名试试, keyfile

试过接口方式,没试过直接com
[/Quote]
试过了啊,还是老样子 。。。
urmy1004 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 51crack 的回复:]

regasm后 gacutil -i 加到缓存 试试
dll加强命名试试, keyfile

试过接口方式,没试过直接com
[/Quote]
我的DLL开发,VB6 exe开发以及部署是在三台不同的机器上,你说的这个是指部署的时候么
ps:我的vb6中直接引用,直接debug也可以,就是部署到机器上的时候,new对象的时候会automation error
urmy1004 2011-04-19
  • 打赏
  • 举报
回复
顶起来啊~
urmy1004 2011-04-19
  • 打赏
  • 举报
回复
我发的另一个帖子在另一版块(VB):http://topic.csdn.net/u/20110419/17/d8abe540-9c92-4130-89ec-851d58bfea40.html?seed=1378383384&r=72860343#r_72860343

16,555

社区成员

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

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