在.NET和COM之间编组复杂的数据类型

时间:2009-07-01 16:36:38

标签: .net com-interop

我花了大约一天时间在VB.NET中编写一个简单的控件库,用于现有的vb6项目。我有大部分工作;我的控件出现在vb6工具箱中,事件工作等等。我当前的问题是试图处理在vb6和.NET之间传递复杂对象。

例如,.NET TextBox的Font属性。现在,vb6使用stdFont对象,.NET(显然)使用System.Drawing.Font类型。我在这个项目中的目标是让vb6方面的变更透明化。我想完全模拟每个控件的vb6接口,以最小化我们添加新控件时需要更改的代码,但我被困在这里。这是一个例子(.NET):

Public Overloads Property Font() As stdole.StdFont
    Get                        
        Return ???
    End Get
    Set(ByVal value As stdole.StdFont)
        Dim style As FontStyle = GetFontStyle(value)
        TextBox1.Font = New Font(value.Name, value.Size, style, GraphicsUnit.Pixel, value.Charset)
    End Set
End Property

正如您所看到的,'getter'就是问题所在。如果我不能返回文本框的Font属性,我怎么能模仿这里的vb6接口?出于显而易见的原因,我不想返回System.Drawing.Font的stdFont副本。

现在,我可以添加像SetBold(),SetItalic()和SetFont()这样的方法(或者像“FontIsBold”这样的布尔属性),但这正是我想要避免的。我的互操作经验相当小,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我很高兴看到你的答案......但我想我错过了一些东西。我按照你提供的msdn链接中的说明进行操作,在VB6端,我可以访问UserControl上的字体属性,但是当我尝试(比如说)设置字体大小时,它不会影响方式文字是绘制的。当我尝试在VB.Net端(在Set Text属性中)的嵌入式TextBox上强制更改字体大小时,我收到一条错误,说font.size是ReadOnly ...

是否有可用的工作示例?