[mono-vb] Issue with callback/delegate

Rolf Bjarne Kvinge rolflists at ya.com
Mon Apr 27 03:28:22 EDT 2009


Hi,

> Hi,
> 
> I would like to use an external library in my Mono VB program. When
> using C# I had no problems with the library, but with Mono VB I got some
> compiler errors caused by a callback/delegate.
> Below you can find the relevant lines of the (working) C# code and the
> same coding in Mono VB syntax. I've also added the compiler errors.
> 
> ----------------------------
> Mono C# Code
> ----------------------------
> /* error handler (callback function) */
> public delegate void HPDF_ErrorHandler(uint error_no, uint detail_no,
>         IntPtr user_data);
> ...
> HPDF_ErrorHandler error_handler = new
> HPDF_ErrorHandler(HPdfDoc.ErrorProc);
> ...
> public static void ErrorProc(uint error_no, uint detail_no,
>      IntPtr user_data) {
>      string s = "error-code=0x" + error_no.ToString("X") + " detail-
> code=" +
> detail_no;
>      throw new Exception(s);
> }
> 
> ----------------------------
> Mono VB Code
> ----------------------------
> ' error handler (callback function)
> Public Delegate Sub HPDF_ErrorHandler(ByVal error_no As UInteger, _
>                                       ByVal detail_no As UInteger, _
>                                       ByVal user_data As IntPtr)
> ...
> (Line 574)  Dim error_handler As New
> HPDF_ErrorHandler(HPdfDoc.ErrorProc)

This is not correct VB (8), you need to do:

Dim error_handler As New HPDF_ErrorHandler (AddressOf HPdfDoc.ErrorProc)

> ...
> Public Shared Sub ErrorProc(ByVal error_no As UInteger, ByVal detail_no As UInteger, ByVal user_data As IntPtr)
>     Dim s As String = ("error-code=0x" & error_no.ToString("X") & " detail-code=") + detail_no

     Throw New Exception(s)
> End Sub
> 
> 
> ----------------------
> Compiler Errors:
> ----------------------
> [Task:File=/share/source/mono/vbnet/vbharutest/vbharutest/hpdf.vb , Line=574, Column=65, Type=Error, Priority=Normal, Description=Argument not specified for parameter 'user_data' of 'ErrorProc((System.UInt32, System.UInt32, System.IntPtr))'.(VBNC30455)]
> [Task:File=/share/source/mono/vbnet/vbharutest/vbharutest/hpdf.vb , Line=574, Column=65, Type=Error, Priority=Normal, Description=Argument not specified for parameter 'detail_no' of 'ErrorProc((System.UInt32, System.UInt32, System.IntPtr))'.(VBNC30455)]
> [Task:File=/share/source/mono/vbnet/vbharutest/vbharutest/hpdf.vb , Line=574, Column=65, Type=Error, Priority=Normal, Description=Argument not specified for parameter 'error_no' of 'ErrorProc((System.UInt32, System.UInt32, System.IntPtr))'.(VBNC30455)]
> 
> 
> When I use
> 
> (Line 574)  Dim error_handler As new HPDF_ErrorHandler = AddressOf
> ErrorProc
> 
> instead, the compiler error would be:
> 
> [Task:File=/share/source/mono/vbnet/vbharutest/vbharutest/<MyGenerator> , Line=1, Column=1, Type=Error, Priority=Normal, Description=CHANGEME(VBNC32008)]
> 

This is a known compiler issue, use the explicit delegate syntax above "new HPDF_ErrorHandler (AddressOf ErrorProc)"


Rolf

> 
> Any ideas how to resolve this issue?
> 
> Thank you for your help,
> Klaus
> --
> View this message in context: http://www.nabble.com/Issue-with-
> callback-delegate-tp23244124p23244124.html
> Sent from the Mono - VB mailing list archive at Nabble.com.
> 
> _______________________________________________
> Mono-vb mailing list
> Mono-vb at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-vb



More information about the Mono-vb mailing list