3

シナリオは次のとおりです。

私はVB6プロジェクトを持っています。型バリアントのパラメーターを ref で受け取るメソッドが含まれています。

Function GetFilledInfo(data As Variant)

このメソッドは、受け取ったパラメーターを構造体で埋めます。この構造は、VB6 プロジェクトで次のように定義されています。

Public Type DATASTRUCTMAIN
   structChild As DATASTRUCTCHILD
End Type

Public Type DATASTRUCTCHILD
   m_bComputeRanges As Long
End Type

VB6 プロジェクトによって生成された ActiveX dll を参照して、このメソッドを呼び出す C# プログラムがあります。

C# プログラム内で VB6 で定義されている構造を宣言し、VB6 メソッドを使用してそれを埋めたいと考えています。

これどうやってするの?

前もって感謝します。

4

1 に答える 1

2

Long のみを渡していることに気付かずにはいられません (簡潔にするためにこれらの構造定義を切り捨てていない限り)。その場合は、VB6 を変更して、Long を返す関数を公開するだけです!

本当の構造があれば...

構造定義を VB6 プロジェクトのパブリック クラスに移動します。その後、VB6 プロジェクトを参照するすべてのクライアントに対して、COM を介して構造定義が公開されます。

C# プロジェクトで使用でき、構造体のインスタンスを宣言できるようになることを願っています。C# プロジェクトのプロジェクト参照に VB6 コンポーネントへの参照がありますよね? .Net COM 相互運用性にあまり詳しくないため、これについてはよくわかりません。

C# プロジェクトで構造体のインスタンスを宣言する際に問題がある場合は、VB6 構造体をクラスに変更できますか? どうやら構造はCOM相互運用で問題になる可能性があります

于 2012-10-25T16:57:55.957 に答える