Vb.net P/Invoke带有变量参数的回调

Vb.net P/Invoke带有变量参数的回调,vb.net,callback,dllimport,variadic-functions,Vb.net,Callback,Dllimport,Variadic Functions,.h文件包含以下签名: typedef void (RTMP_LogCallback)(int level, const char *fmt, va_list); void RTMP_LogSetCallback(RTMP_LogCallback *cb); 我想在VB.NET应用程序中使用它,所以我尝试了以下方法: <DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)> Public Share

.h文件包含以下签名:

typedef void (RTMP_LogCallback)(int level, const char *fmt, va_list);
void RTMP_LogSetCallback(RTMP_LogCallback *cb);
我想在VB.NET应用程序中使用它,所以我尝试了以下方法:

<DllImport("librtmp.dll", CallingConvention:=CallingConvention.Cdecl)>
Public Shared Sub RTMP_LogSetCallback(cb As LogCallback)
End Sub

<UnmanagedFunctionPointer(CallingConvention.Cdecl)>
Public Delegate Sub LogCallback(level As LogLevel, message As String, args As IntPtr)
args
包含一个似乎是参数数组指针的整数


如何从该数组中获取值?

VB.NET不支持变量函数。它们在C#中几乎不受支持,带有undocumented__arglist关键字。一种方法是从msvcrt.dll中pinvoke vsprintf()函数,有很多方法可以让你大吃一惊。你应该考虑用C++或CLI语言来帮助一个DLL。好的,我会使用一个DLL。顺便问一下,我能指望在指针后面得到什么吗?
Private m_LogCallback As New LibRtmp.LogCallback(AddressOf LogCallback)
Private Sub LogCallback(lvl As LibRtmp.LogLevel, message As String, args As IntPtr)
    Console.WriteLine(message)
End Sub