首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

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

2012-12-14 
求助:VB调用COM COM中定义结构体包含String类型,为什么在VB层不能复制求助:VB调用COM COM中定义结构体包含

求助: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)] 问题解决

热点排行