C#で、どうしてもVBの関数を使用したいって要求がありました。 で、調べてみると、これが意外と簡単に利用できることが分かりましたので、 メモとして残しておきます。 .NETのアセンブリ、つまりバイナリ化されたDLLのことですが、こいつはCOM構造になってます。 COM(Component Object Model)の詳しい説明は例によって関連サイトにお任せですが、 COMのコンセプトはインターフェースの型があっていれば、 その中に記述される言語は問わないというのがあります。 例えばC++から呼び出されるCOMの中身がVBで書かれていようと、PASCALで書かれていようと、 インタフェースの型さえ合っていれば、 それは呼び出し可能であるとします。 例としては不適切ですが、例えば、インターネットエクスプローラーからネットを介し、 あるサーバーに接続したとします。 この場合、IEはクライアント、ネットのhttpはインターフェース、Webサーバーはオブジェクトして考えれば、 IEから見たとき、httpを使用して接続した相手は、期待する機能を実行してもらえればそれで良く、 それがWindowsサーバーであろうとLinuxサーバーであろうとクライアントとしては関知しないことになります。 COMも同じで、インターフェースを介して呼び出したメソッドが正しく実行されればよく、 それを実現するためにCOM内部でどのようなことが行われているのかまでは関知しません。 さて、VBのランタイムモジュールですが、これが見事に.NETアセンブリとして存在しており、 使用できる雰囲気がします。 VisualStudio.NETのIDEのプロジェクトメニューから「参照の追加」を選ぶと、 現在利用可能な.NETアセンブリの一覧を見ることができます。 この中を丹念に見ていくと、Microsoft.VisualBasicが発見できますので、すかさず追加します。 正しく追加されれば、プロジェクトマネージャのReferenceのノードにVBのDLLが見えるはずです。 これで、C#からはいつでもVBの関数を使用できる状況になりました、 例えばVBのStrConv関数を利用するとしましょう。 この関数は文字列の半角・全角変換を行う便利な機能を持っているのですが、VBにはあって、 残念ながらC#にはありません。 そこで、VBのランタイムを呼び出して、これを使ってしまおう、というのが目的です。 上記のように、VBランタイムの.NETアセンブリは追加されたとします。 後は簡単、あたかもC#のライブラリのように使用できます。 string myStr="my strings"; string ssb=Microsoft.VisualBasic.Strings.StrConv(myStr,Microsoft.VisualBasic.VbStrConv.Wide,0); myStrには"my strings"という半角文字列が入っています。 StrConvを通すと、文字変数ssbには全角変換された文字列は格納されます。 結果は"my strings"となります。 実際に使用してみました。 特に問題はないようです。というか、快適に使用できます。 この手の関数。作ってもいいのですが、地味~に面倒だったります。(^^; せっかくあるなら使っちゃおう!てことで、やってみました。 もし、C#からVBの関数を使いたいといった要望をお持ちの方がおりましたら、この方法を試してみてください。