2011-01-03 13 views
1

私はメソッドとインターフェイスを持つ.Netオブジェクトを持っています。 インタフェースは、いずれかのパラメータがlong型であると想定しています。
問題はLong by vb6が.netでLongではないことです。それは同じ長さではないので、私のVB6プログラムは今私の.netオブジェクトを呼び出すことができません。 これを使用するすべてのクライアントに影響を与えるため、この変更をintにするために.netでインターフェイスを破壊することはできません。VB6と.Netインターフェイス - 長いVB6データ型は何ですか?

クリエイティブなアイデアはありますか?さらに詳細がなく

TY

答えて

2

直接的に相当するものはありません。あなたのジレンマが議論されており、ここに示した解決策:数値引数を取る

http://www.thescarms.com/vbasic/vb6vsvbnet.aspx

ほとんどのAPIは、32ビット値を期待してい 。 VB6では、 長いデータ型です。 VB.NETでは、longは の64ビットで、32ビットの API呼び出しでは機能しません。 APIの を呼び出す前に、.NET APIのパラメータ を 整数型に変更またはキャストする必要があります。

多くのAPIは、VBの から呼び出し可能になりません。他のAPIは、 の代わりになります。文字列を渡すものの中には、 という文字列またはNull値の正しい を渡すために調整する必要があります。詳細については、VB.NET のヘルプを参照してください。

ケースごとにケース でAPIを処理する必要があります。あなたの最善の策は すべてのAPI呼び出しを分離して、 の変更をコード内の単一の 場所に作成するだけです。 ツールをアップグレードすると、ラッパーを作成してAPI呼び出し を変換しようとします。 ただし、手動介入は が必要です。

2

は、短い答えは、あなたがパラメータを取る別の1で.NETオブジェクトをラップすることであるあなた必要に応じて呼び出したときに VB6からのパス、およびはlongに変換することができます既存のオブジェクトのメソッド

問題のプログラムのみがラッパー/新しいインターフェイスを使用する必要があります。既存のインターフェイスは他のすべてのシステムでそのまま維持されます。

+0

+1。それは良い。それはうまくいくはずです。 – David

関連する問題