none
[vb2010]C#轉VB問題:引用DLL的API RRS feed

  • 問題

  • 各位先進好,
    請教以下C#引用DLL的語法,要改成VB該怎麼寫呢?
    C#:

    [DllImport(XXX_DLL)] private static extern unsafe xxxApiReturn
                Stream_registerEventCallback(int hStreamingChannel,
                                           int EventID,
                                           EventCallback Callback,
                                           void *Context);
    
    [DllImport(XXX_DLL)] private static extern unsafe xxxApiReturn
                Stream_getMessageData(int hStreamingChannel,
                                    int EventID,
                                    int MessageID,
                                    void **MessageData,
                                    int *MessageLength); 

    轉成VB

    <DllImport(XXX_DLL)> _ Private Shared Function Stream_registerEventCallback(
    hStreamingChannel As Integer,
    EventID As Integer,
    Callback As EventCallback,
    Context As Pointer(Of System.Void)) As xxxApiReturn End Function <DllImport(XXX_DLL)> _ Private Shared Function Stream_getMessageData(
    hStreamingChannel As Integer,
    EventID As Integer,
    MessageID As Integer,
    MessageData As Pointer(Of Pointer(Of System.Void)),
    ByRef MessageLength As Integer) As xxxApiReturn End Function

    以上void *Context, void **MessageData 不知道怎麼轉,請各位先進指教,謝謝。




    • 已編輯 jk.yang 2013年1月9日 上午 06:12
    2013年1月9日 上午 06:06

解答

所有回覆

  • 介紹一套好用的軟件:http://visualstudiogallery.msdn.microsoft.com/94c245e9-547a-4e47-87da-08dbcd283d7f

    當然,它轉換不是百分百正確,你還是要瞭解一些C#與VB的知識。


    理直氣和,切記。

    http://blog.kkbruce.net

    2013年1月9日 上午 06:30
  • hi, KKBruce
    感謝您的回覆
    我拿去轉,得到的是

    <DllImport(XXX_DLL)> _
    Private Shared Function Stream_registerEventCallback(hStreamingChannel As Integer, EventID As Integer, Callback As EventCallback, Context As System.Void*) As xxxApiReturn
    End Function
    
    <DllImport(XXX_DLL)> _
    Private Shared Function Stream_getMessageData(hStreamingChannel As Integer, EventID As Integer, MessageID As Integer, MessageData As System.Void**, MessageLength As Integer*) As xxxApiReturn
    End Function



    好像也不行耶…
    Context As System.Void*
    MessageData As System.Void**
    語法不會過…

    2013年1月9日 上午 08:16
  • 我對VB.NET是沒這麼熟,

    但我覺得要不要先參考一下下面兩篇文章

    1. Walkthrough: Calling Windows APIs (Visual Basic) 的 API Calls Using DllImport
    2. 呼叫外部dll或api的宣告

    先寫出可以正確呼叫到API的寫法後,在比較一下直接轉的差異。

    之後才可以直接修正,

    此外,除了DllImport外, 用Declare來用,對VB.NET來說應該方便與簡潔一些

    2013年1月10日 上午 03:50
  • void*和void**都是指標, 所以都可以用IntPtr來表達
    • 已標示為解答 jk.yang 2013年1月11日 上午 05:42
    2013年1月10日 上午 07:27
  • http://www.dotblogs.com.tw/chou/archive/2009/06/22/8928.aspx

    不曉得對你有沒有幫助。

    2013年1月11日 上午 05:15
  • 感謝tihs,語法過了。
    等改好,再試跑看看。
    感恩,也感謝各位的熱情幫忙! ^^

    2013年1月11日 上午 05:41