
VB6.0では、DLLを利用する際の宣言部分で、パスを""で括った静的な記載でなく、動的な記載にできるのでしょうか。
色々と調べてみたのですが、イマイチピンとくるものがなかったので質問させていただきました。
例:Public Declare Function Ztest Lib "C:\Test1\Test2" Alias "Test3" (ByVal data1 As Long) As Long
↓動的に変更したい
Public Declare Function Ztest Lib "○○:\Test1\Test2" Alias "Test3" (ByVal data1 As Long) As Long
No.1ベストアンサー
- 回答日時:
できません。
Declareの場所は大域変数の宣言、つまり定数などを定義する
領域です。これをプログラム実行中に変更しようという行為
ですから、ダメな理由は分かると思います。
Basicではポインタを使用してメソッドを呼び出す手段が
ありません。よって、動的なDLLのロードを行い、関数の
アドレスを得ることはできますが、そこへ制御を移す手段が
無いのです。
但し、同じファイル名のDLL(中身は異なる)を別フォルダに
保存しておき、動的にどちらのフォルダからロードさせるかを
決めることはできます。方法はクラスオブジェクトを使います。
例えば、Class1に以下のような定義をします。
Private Declare Function Ztest Lib "Test1\Test2" _
Alias "Test3" (ByVal data1 As Long) As Long
Public Function ZCall(ByVal data1 As Long) As Long
ZCall = Ztest(data1)
End Function
呼び出し側は次のようにします。
Dim C As Class1
Dim A1 As Long, A2 As Long
SetCurrentDirectory "C:\AAA" 'カレント切り替え
Set C = New Class1 'インスタンス生成
A1 = C.ZCall(0) 'メソッド実行
Set C = Nothing 'インスタンス消滅
SetCurrentDirectory "C:\BBB" 'カレント切り替え
Set C = New Class1 'インスタンス生成
A2 = C.ZCall(0) 'メソッド実行
Set C = Nothing 'インスタンス消滅
DLLがシステムディレクトリになければカレントを探します。
クラスオブジェクトはインスタンス生成の度にDLLをロード
しますので、その時にカレントを切り替えておくと似たような
処理にすることができます。標準モジュールは静的な空間なので、
ここでDLLを定義すると、ロードされたDLLを解放できません。
No.2
- 回答日時:
返信が送れて申し訳ありません。
リンク先確認しました。
VB初心者ながら読んで理解してみましたが、残念ながら、やりたいことと少し違うように感じました。ただ、こういうことは可能だということは覚えておきます。
回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#において、同じインスタンス...
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
C# インスタンスの破棄
-
フォームの存在をチェックする方法
-
オブジェクト参照がオブジェク...
-
文字列を日付に変換でParseExce...
-
Systemクラスはインスタンスが...
-
抽象クラスのインスタンス生成...
-
生成したインスタンスを削除す...
-
VB6.0で、DLLを動的に参照したい
-
C# のインスタンスの破棄
-
変数名の付け方
-
vb.netでFAXを送信する方法
-
SerialPort処理でInvokeメソッ...
-
newしないインスタンス?実体化...
-
中学のクラス数
-
「タイプ初期化子が例外をスロ...
-
ヒグマを撃退
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
インスタンス参照でアクセスで...
-
C#において、同じインスタンス...
-
C# インスタンスの破棄
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
「インスタンス」の意味をわか...
-
フォームの存在をチェックする方法
-
生成したインスタンスを削除す...
-
変数の参照でエラーが出てしま...
-
文字列を日付に変換でParseExce...
-
javaのクラスの作り方、エラー...
-
newしないインスタンス?実体化...
-
インスタンスを同じ名前で作成...
-
VB6.0で、DLLを動的に参照したい
-
データベースから日付型を取得...
-
C#のメモリ解放についてご教授...
-
SQLを連続発行する時の正しい(?...
おすすめ情報