代码改变世界

.NET中调用COM的一些问题

2004-06-26 11:46  灵感之源  阅读(1991)  评论(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。