2

文字列のキーと値のペアのコレクションを VB6 から .NET に渡す必要があります。VB6 コードでは、それらはネイティブ コレクションに存在します。しかし、メソッドの 1 つで Collection 型のパラメーターを受け入れるために、.NET プロジェクトで何を参照できるかわかりません。

Visual Basic for Applications への参照を追加しようとしましたが、「'Visual Basic For Applications' への参照を追加できませんでした」というメッセージが返されました。

私はそれについて間違った方法で進んでいますか?

4

3 に答える 3

3

C# では次のようなものを使用できます。

[Guid("fb5e929a-2f8b-481e-9516-97edf5099df4")]
[ComVisible(true)]
public interface myInterface{
public void addObject(string key, string value);
}

そして、あなたのクラスでは、これを持つことができます:

private collection
public addObject(string key, string value)
{
collection.Add(key, value);
}

これにより、vb6 で addObject を呼び出してデータを渡すことができるようになります。次に、.net がそれをコレクションに追加するので、コレクション全体を vb6 から .net に渡す代わりに、それらを 1 つずつ渡します。

GUIDの詳細については、こちらを参照してください。

vb6 と c#の間のコードの例を含む COM の詳細については、こちらを参照してください。

于 2013-03-27T00:26:17.890 に答える
2

COMを使用するよりも、データをJSONとしてシリアル化し、Interop キャズムを介してプレーン テキストとして送信する方がはるかに簡単であることがわかりました。最初は抵抗がありましたが、今では私の頼りになるソリューションです。「適切な」解決策がイライラする場合は、試してみてください。

于 2013-03-27T02:19:17.227 に答える
1

Visual Basic 6.0 でa を作成して、.NETに渡してみてください。HashTable

Set dictionary = Server.CreateObject("System.Collections.HashTable")
With dictionary
    For i = 1 To 100
        .Add Chr(i), "some text value"
    Next
End With

次に、C# またはVB.NET COM公開クラスで

public string LoadHashTable(Object tDict)
{
   return String.Format("Type : \"{0}\", Count : {1}", ((Hashtable)tDict).GetType().ToString(), ((Hashtable)tDict).Count);
}

COM 公開クラスの例は、Stack Overflow の質問Building a COM interop library for ASP Classic using 4.0 Framework and Visual Studio 2010 にあります。

x86 と x64 の両方で忘れずに登録してください。

%windir%\Microsoft.NET\Framework\v4.0.30319\regasm MyThing.dll /tlb:MyThing.tlb /codebase MyThing

%windir%\Microsoft.NET\Framework64\v4.0.30319\regasm MyThing.dll /tlb:MyThing.tlb /codebase MyThing
于 2013-03-27T01:42:04.653 に答える