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