VB.NET デリゲートへのコールバック関数の設定
VB.NETとネイティブC/C++ DLL間でのコールバックについての質問です。
ネイティブDLLからVOID*で得られるコールバック関数をVB.NETのデリゲートに
登録するには、どのようにコーディングすればよいのでしょうか。
---------- VB.NETソース ----------
Public Delegate Sub CALLBACK_00(ByVal Arg1 As Integer, ByVal Arg2 As Integer)
Declare Function FuncPtrGet Lib "test.dll" () As CALLBACK_00
Dim Func As new CALLBACK_00(FuncPtrGet());
2行目は、実際にはVOID*が帰るDLL関数です。
3行目がコンパイルで通りません。AddressOfで関数を指定するようにメッセージが出ます。
No.1ベストアンサー
- 回答日時:
えーっと,Visual BasicではなくVisual Basic.NET (=Visual Basic 7.0 or 7.1) なのですか?
それだと,安全な呼び出し方法は存在しません。
C等で呼び出しようのヘルパーを用意することになると思います。
Visual Basic 8.0かそれ以降であるならば,
MSDN: Marshal.GetDelegateForFunctionPointer メソッド (System.Runtime.InteropServices)
http://msdn.microsoft.com/ja-jp/library/system.r …
という,正規の方法があります。
Declare Function FuncPtrGet Lib "test.dll" As IntPtr
に変更後,
Dim Func As CALLBACK_00 = DirectCast(Marshal.GetDelegateForFunctionPointer(FuncPtrGet(), GetType(CALLBACK_00)), CALLBACK_00)
とすることで,Funcは適切に設定されますので,安全にメソッドを呼び出すことが来ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBA 行削除した連番 4 2023/06/27 16:00
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
VBPをダブルクリックするとたま...
-
VBA コピーが出来ません…!
-
DataGridViewでセルクリックイ...
-
エクセルVBAにおけるON TIMEメ...
-
javascriptからjavaを呼び出したい
-
コマンドプロンプト実行後に画...
-
Range クラスのAutoFitプロパテ...
-
配列のメソッド
-
コンパイルエラーの理由。
-
Labelコントロールに数字を代入...
-
ウィンドウを最前面にできません
-
CALLされていないメソッドを見...
-
【sendkeysメソッドが動かずに...
-
final修飾子を使っているのに、...
-
特定の文字でReplaceメソッドが...
-
C#SundPlayerで同期再生が再生...
-
ExcelVBAのプログラムをJavaへ変換
-
VB.NETでのEXCELファイルの閉じ方
-
初心者です。メソッドの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
final修飾子を使っているのに、...
-
JSPで<SELECT>の中にDBから持っ...
-
Labelコントロールに数字を代入...
-
エクセルVBAにおけるON TIMEメ...
-
javascriptからjavaを呼び出したい
-
DataGridViewでセルクリックイ...
-
VBPをダブルクリックするとたま...
-
onClickで関数呼出し後に、結果...
-
コマンドプロンプト実行後に画...
-
配列のメソッド
-
日本の教育って時間が無い中で...
-
Refreshメソッドの使い方
-
mainメソッドのthrows節で設定...
-
【sendkeysメソッドが動かずに...
-
C# 演算 最大値 最小値 表現の仕方
-
VBA コピーが出来ません…!
-
Application.Wait の参照設定
-
ウィンドウを最前面にできません
-
for文(拡張)内の変数(ローカ...
おすすめ情報