.NET中调用COM的一些问题
2004-06-26 11:46 灵感之源 阅读(2048) 评论(6) 编辑 收藏 举报因为不想花太多的时间去迁移VB6写的COM组件到.NET,所以考虑用InterOp,导入很顺利,声明也可以,但在获取窗口的Handle(.NET)的时候,卡住了。
问题1:handle
因为COM中声明的hwnd为long,对应.NET的integer,但.NET中的handle类型为IntPtr,是指针,后来查看了相关文档,应该这样处理(VB.NET):
objYourCOM.hwnd=objYourDOTNET.IntPtr.ToInt32
问题2:multi-thread
要在VB6里面实现安全线程是比较困难的事情,为了最大限度榨取.NET的潜力,我把多线程部分挪到.NET中实现,实际上,VB.NET中的多线程调用跟VB6的很类似,都是用AddressOf,不过差别在于:VB6中必须声明为公共Function,VB.NET中要声明为Sub,私有共有皆可。
Private t As Threading.Thread
Private WithEvents m As MyObject
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
m.ParentHwnd = Me.Handle.ToInt32
t = New Threading.Thread(AddressOf m.YourFunction)
t.Start()
End Sub
稍后我会介绍怎样把VB6的代码迁移到VB.NET,虽然很多人都谈过,但我会把实际项目代码作为例子,覆盖面比较广,应该能让大家更好地认识.NET。