[英]Unable to ReDim array from C# class in VB6
我必須在包含數組的vb6中使用C#類。 我將它們編組為安全數組,但無法在VB6中重新定義它們,盡管在觀察中我看到它們具有正確的類型。 當我在struct中使用相同的封送處理時,它工作正常。 它們之間的區別在於,在struct中,我有字段,在類中,我有屬性,所以我認為我對此有一些問題,但我找不到。
這是我的測試課:
[ComVisible(true)]
[Guid("179181EF-8689-4CCA-B43E-34145F5A9608")]
public interface IBook
{
string Title { [return: MarshalAs(UnmanagedType.BStr)] get; [param: MarshalAs(UnmanagedType.BStr)] set; }
string[] Keywords { [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)] get; [param: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)] set; }
int[] Years { [return: MarshalAs(UnmanagedType.SafeArray)] get; [param: MarshalAs(UnmanagedType.SafeArray)] set; }
}
[ComVisible(true)]
[Guid("61AF9F28-3588-4C26-A971-2C42CFC2040B")]
[ClassInterface(ClassInterfaceType.None)]
public class Book : IBook
{
public string[] Keywords { get; set; }
public string Title { get; set; }
public int[] Years { get; set; }
}
這是我的vb6代碼:
Dim book As New TestProject.book
Set book = New TestProject.book
ReDim book.years(1 To 3)
嘗試編譯時,收到編譯錯誤:“未找到方法或數據成員”
我在C#中重復代碼以查找問題。 看起來在c#中,您必須使用一個臨時變量(temp)
using System;
using System.Collections;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Test test = new Test();
Test.Book book1 = new Test.Book { Keywords = new string[] { "a", "b", "c" }, Title = "123", Years = new int[] { 30 } };
Test.IBook Ibook1 = (Test.IBook)book1;
Test.Book book2 = (Test.Book)Ibook1;
int[] temp = Ibook1.Years;
Array.Resize(ref temp, 3);
Ibook1.Years = temp;
}
}
public class Test
{
[ComVisible(true)]
[Guid("179181EF-8689-4CCA-B43E-34145F5A9608")]
public interface IBook
{
string Title { [return: MarshalAs(UnmanagedType.BStr)] get; [param: MarshalAs(UnmanagedType.BStr)] set; }
string[] Keywords { [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)] get; [param: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)] set; }
int[] Years { [return: MarshalAs(UnmanagedType.SafeArray)] get; [param: MarshalAs(UnmanagedType.SafeArray)] set; }
}
[ComVisible(true)]
[Guid("61AF9F28-3588-4C26-A971-2C42CFC2040B")]
[ClassInterface(ClassInterfaceType.None)]
public class Book : IBook
{
public string[] Keywords { get; set; }
public string Title { get; set; }
public int[] Years { get; set; }
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.