- 締切済み
VisualBasic6.0からVisualC++で作成したDLLを呼
VisualBasic6.0からVisualC++で作成したDLLを呼び出す、簡単なプログラムの仕方を教えてください。 初心者ですが、VisualBasic6.0からVisualC++で作成したDLLを呼び出す簡単なプログラムの仕方、または、サンプル等がありましたらどうぞ宜しくお願いいたします。初心者なので、可能な限り、簡単なプログラムのサンプルがあったら嬉しいです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
モジュールのGeneric部(プロシージャに属さない部分)に 以下の宣言文を記述します。 Declare Function|Sub 関数名 [Alias "実関数名"] Lib "DLLのパス" ([パラメータ定義]) [As 戻り値の型] 例: Declare Function AscToInt Lib "MyDLL" _ (ByVal 文字 As String) As Long MyDLL上にあるAscToIntという関数を定義しています。 パラメータは文字列で、戻り値は整数です。 使用する場合は以下の通りです。 Dim T As String Dim R As Long R = AscToInt(T) DLLはシステム既定フォルダ→カレントフォルダの順に 探します。これ以外の場所にある時はフルパスを指定する 必要がありますが、移植時に困るので、DLLはカレントに 置いて、実行後は直ぐにカレントを移動するようにします。 定義例のように拡張子が".DLL"の場合は省略可能です。 パラメータと戻り値の形式はVBの型とC++での型の違いを 良く認識したうえで定義する必要があります。 ByValは値渡し、ByRef(省略時解釈)は参照(ポインタ)渡し です。文字列はANSI変換がかかります。 また、Declare Function とした場合は戻り値がVariant型 出ない限り、必ず型宣言しなければなりません。これをしないと、 戻り値を参照するしないに関わらず、戻り値をVariantに変換 しようとするので、場合によってはメモリの無い所をポインタで 参照する危険があります。 尚、DLLはリンク時に名前でエントリポイントを取得可能な ように作っておかないと、関数を見つけられません。
Googleで、VB6 Windows API などと検索するとサンプルは山ほど出てきます。 C++で作ったDLLをCallとはいってもやり方はいくつかあり。 いわゆる、ActiveXという形にしたものであれば、DLLのregsvr32登録+VB側で 参照設定をしてから関数を呼ぶことになりますし。 普通のDLLならば、標準モジュールで、Declare Function xxx というような 関数宣言をしてから関数を呼ぶことになります。 DLL次第といったところでしょう。