
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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Excel(エクセル) 【VBA】 Alt+PrintScreenにてアクティブウィンドウのスクショを貼付する方法 4 2022/12/08 20:53
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) M365環境での動作エラー、及び対応相談 1 2023/01/27 04:18
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Excel(エクセル) excel vba 参照渡しと値渡し 2 2022/04/27 10:45
このQ&Aを見た人はこんなQ&Aも見ています
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。
-
VB6.0(SP6)にて開発を行なっています。参照設定に関して教えてく
IT・エンジニアリング
-
VBから参照できないCのDLLを使用する方法
Visual Basic(VBA)
-
vb ver6 でformat文やTrim文の関数が使用できなくなりました。
Visual Basic(VBA)
-
-
4
regsvr32で登録された一覧を知りたい
UNIX・Linux
-
5
Cで作成したDLL関数をVBから呼び 引数渡し方法
Visual Basic(VBA)
-
6
DLLをREGSVR32しないで利用する方法について。
Visual Basic(VBA)
-
7
VB6.0を使用しています
Visual Basic(VBA)
-
8
VB6で、長い時間かかる処理実行中の表示の工夫について
Visual Basic(VBA)
-
9
VB6.0-整数と余りを求める
Visual Basic(VBA)
-
10
VB(6.0)で作成したDLLをVB(.Net)で呼び出す方法
Visual Basic(VBA)
-
11
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
12
frxファイルの役目
Visual Basic(VBA)
-
13
API関数(DLL)の呼び出しにおいて、DLLの格納場所は?
Visual Basic(VBA)
-
14
配列を関数に渡す方法
Visual Basic(VBA)
-
15
VisualBasic6.0のFormat関数でmSecを表示したい
Visual Basic(VBA)
-
16
オブジェクト(dll)のレジストリ登録について
Visual Basic(VBA)
-
17
regsvr32.exe による DLLの登録について
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の変数を宣言する時、同時...
-
C# インスタンスの破棄
-
変数名の付け方
-
private static という変数の修飾
-
オブジェクト参照がオブジェク...
-
C#において、同じインスタンス...
-
文字列を日付に変換でParseExce...
-
VB.NET getとsetの概念がわかり...
-
[Visual C#] 優先される処理に...
-
SQLを連続発行する時の正しい(?...
-
C++での静的ライブラリの作成方法
-
生成したインスタンスを削除す...
-
C#「オブジェクト参照が必要で...
-
PHPExcel使用で2枚目のシートを...
-
Dimensionクラスの使い方
-
フォームの存在をチェックする方法
-
javaのインスタンス変数とクラ...
-
「インスタンス」の意味をわか...
-
CFrameWnd とCFormView
-
クラスのインスタンス名をクラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
オブジェクト参照がオブジェク...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
VB.NET getとsetの概念がわかり...
-
「インスタンス」の意味をわか...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
C#「オブジェクト参照が必要で...
-
インスタンスを同じ名前で作成...
-
SQLを連続発行する時の正しい(?...
-
インスタンスのハンドル
-
C#の構造体の開放のしかた
-
クラスのインスタンス名をクラ...
-
C#のメモリ解放についてご教授...
-
javaのクラスの作り方、エラー...
おすすめ情報