C#でVBの関数を使う。

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の関数を使いたいといった要望をお持ちの方がおりましたら、この方法を試してみてください。

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: