2016-12-05 20 views
0

イムとして配列、VS 2010、.NET 3.5、x86のCOMオブジェクト - C#でCOMオブジェクトを開発する代わりに、型のオブジェクト

私はVBAに現れたCOMオブジェクト内の構造体の配列を持っていましたすべてのフィールドとすべてのものでうまくいく。

私はいくつかの問題を作成してからクラスに切り替えました。 今、配列の要素が型ではなくオブジェクトとして表示されるため、配列のプロパティにアクセスすることができません。フィールドを表示するときに私が見るデバッガで

[Guid("8b65079f-5d98-41e7-9579-1ee384948e4c")] 
[ComVisible(true)] 
public interface IContact 
{ 
    string Test1 { get; set; } 
    string[] Array1 { get; set; } 
} 

[Guid("8b65089f-5d98-41e7-9579-1ee384948e4c")] 
[ComVisible(true)] 
[ClassInterface(ClassInterfaceType.AutoDual)] 
public class Contact : IContact //Used To Be a struct 
{ 
    //[MarshalAs(UnmanagedType.BStr)] 
    public string Test1 { get; set; } 
    public string[] Array1 { get; set; } 
} 

public class InContainer 
{ 

     public Contact[] Contacts { get;set;} 
     public string[] strings { get; set; } 
} 

Container.Contacts() - オブジェクト

として>(0~4)の代わり

Container.Contactsの() - >(0〜4)お問い合わせ

何が欠けていますか?ありがとう!

+0

That's 1 COMでの作業には、内部* what'sを参照してくださいドント*。 Btw:なぜこの質問はC#にタグ付けされていますか? – HimBromBeere

+0

comオブジェクトはC# で書かれていますが、構造体だったときに何が入っているかを見ていました。他のクラスに問題はありません – PonWer

+0

VBAでもオブジェクト型をテストするにはtypeofを使用できます。行く価値があるかもしれない。 – bilpor

答えて

1

ここではいくつかのものは、あなたがチェックすることができます:

  1. があなたのコンテナクラスが正しく宣言されていることを確認します(私はそれが既にCOM-表示されていると思いますが、それはあなたのサンプルに示されていない:

    [Guid("EA34C9D6-3EAA-4D44-A8BA-81CC2E79090B")] 
    [ComVisible(true)] 
    [ClassInterface(ClassInterfaceType.AutoDual)] 
    public class InContainer 
    
  2. 正しく/codebaseスイッチ付きます。regasmの正しいバージョン(おそらくあなたは32ビットのいずれかが必要)を使用してアセンブリを登録:

  3. VBAでは、コンテナをインスタンス化します(例:遅延バインディングを使用して:

    Sub Test() 
        Dim a As Object 
        Set a = CreateObject("Issue40977311.InContainer") 
    End Sub 
    

    これが示されている正しいタイプの結果:

    enter image description here

    また、あなたもします。regasmの/tlbスイッチを使用してタイプライブラリを作成することができます。

    regasm /codebase <myassembly.dll> /tlb 
    

    と、VBAで作成した.tlbファイルへの参照をで追加します。ツール>参照先>参照。次のように次に、あなたのオブジェクトをインスタンス化することができます

    警告の
    Sub Test() 
        Dim a As Object 
        Set a = New Issue40977311.InContainer 
    End Sub 
    
関連する問題