原因としては
VB6.0でDLLにCallback関数のアドレスを「Address Of 関数名」で渡していたものが
.NET変換後 では 「AddressOf」が使用できずに上記エラーとなってしまう。
エラーの回避方法
下記のようにdelegate型の変数を作成し,それを渡すことで解決できる
.NET変換直後(修正前)
-------------------------------------------------------------------------------------------
(DLL関数宣言部)
Public Declare Function DllMethod Lib "xxx.DLL" (ByVal handle As Integer, ByVal callback As Integer) As Integer
(DLL関数呼び出し部)
Call DllMethod(handle, AddressOf callbackproc)
'DllMethod:DLL関数名
'callbackproc:Callback関数名
(Callback関数部)
Public Function callbackproc(ByVal id As Integer, ByVal msg As Integer) As Integer
'処理内容 ・・・
End Function
-------------------------------------------------------------------------------------------
修正後(修正個所赤文字)
-------------------------------------------------------------------------------------------
(DLL関数宣言部)
Public Declare Function DllMethod Lib "xxx.DLL" (ByVal handle As Integer, ByVal callback As CallbackDelegate) As Integer
(DLL関数呼び出し部)
Call DllMethod(handle, New CallBackDelegate (AddressOf callbackproc) )
'DllMethod:DLL関数名
'callbackproc:Callback関数名
(Callback関数部)
Public Function callbackproc(ByVal id As Integer, ByVal msg As Integer) As Integer
'処理内容 ・・・
End Function
(Delegate宣言部)
public Delegate Sub CallBackDelegate (ByVal id As Integer, ByVal msg As Integer)
-------------------------------------------------------------------------------------------
0 件のコメント:
コメントを投稿