
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
コマンドプロンプト実行後に画...
-
ODBCでMoveNextがうまく動作し...
-
(String args[])というメッソ...
-
JSPで<SELECT>の中にDBから持っ...
-
0歳児の指しゃぶりに関して
-
EXCEL VBAの構造体検索について
-
引数で日付を2つ与え、その間の...
-
StrGrdIOのSaveToFileメソッド...
-
CALLされていないメソッドを見...
-
DBunitの期待値についての質問...
-
オーバーロードの「あいまい」...
-
vbaエクセルマクロ RemoveDupli...
-
変数名の付け方
-
(vba)他のアプリケーションの右...
-
複数の変数を宣言する時、同時...
-
PHPExcel使用で2枚目のシートを...
-
vb.netでFAXを送信する方法
-
オブジェクトレベルとメタレベル
-
恋愛
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
配列のメソッド
-
mainメソッドのthrows節で設定...
-
final修飾子を使っているのに、...
-
0歳児の指しゃぶりに関して
-
javascriptからjavaを呼び出したい
-
DataGridViewでセルクリックイ...
-
JSPで<SELECT>の中にDBから持っ...
-
boolean型のフィールドとゲッタ...
-
Labelコントロールに数字を代入...
-
ウィンドウを最前面にできません
-
処理内容がほぼ同じメソッドの...
-
eclipse-Tomcatでのデバッグに...
-
CALLされていないメソッドを見...
-
FEM解析の読み方は?
-
エクセルVBAにおけるON TIMEメ...
-
Application.Wait の参照設定
-
コマンドプロンプト実行後に画...
-
VBA コピーが出来ません…!
-
drawStringで文字間隔の調整
おすすめ情報