VB调用COM COM中定义结构体包含String类型,为什么在VB层不能复制

求助:VB调用COM COM中定义结构体包含String类型,为什么在VB层不能复制
求助:VB调用COM COM中定义结构体包含String类型,为什么在VB层不能复制
代码大概如下 
VB:
Private Sub test_Click()
    
    Dim attrInfoSub As ComDll.AttrInfo
    attrInfoSub.attrNmCd = "ABC"
 End Sub

COM:
C#编写
namespace ComDll
{
    [Guid("38C64834-08F9-4ad2-9FEE-E1F99D81FADC")]
    public struct AttrInfo
    {
       
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]
        public String attrNmCd;
       
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)]
        public String attrValCd;
    }
}

问题发生在VB中调用COM的结构体,给结构体中的一个元素赋值 就会提示“不能给数组赋值”
错误代码提示在attrInfoSub.attrNmCd = "ABC"位置
高手  请帮忙
------解决方案--------------------
用要这种方式来定义:
Public Property Let attrNmCd(ByVal vData As string)

End Property

Public Property Get attrNmCd() As string

End Property
------解决方案--------------------
该回复于2010-11-04 10:32:49被版主删除
------解决方案--------------------
能具体点么 因为我是在VB层调用COM层的结构体赋值 并且我需要把这个结构体传递到COM层 
是不是我需要在VB层把这个结构体声明为全局变量
然后比如结构体中包含3个字符串属性
就需要写3套
Public Property Let attrNmCd(ByVal vData As string)

End Property

Public Property Get attrNmCd() As string

End Property
么?
------解决方案--------------------
是不是和sizecount有关系?
------解决方案--------------------
问题解决了 原因是在COM层中定义字符串 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)] 声明改成[MarshalAs(UnmanagedType.BStr)] 问题解决