簡體   English   中英

無法從VB6中的C#類重新數組數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM