2017-01-13 4 views
1

Die betreffende API-Referenz befindet sich here.Wie importiere ich linphone_core_get_calls in vb und rufe sie auf?

muß ich wissen, wie man richtig DLLImport und diese dann in vb verwenden:

const bctbx_list_t* linphone_core_get_calls ( LinphoneCore * lc ) 

Der Teil I mit Mühe habe, ist der const bctbx_list_t* Rückgabewert. Ich versuchte, die Dllimport wie dies erklärt:

<DllImport(LIBNAME, CallingConvention:=CallingConvention.Cdecl)> 
Private Shared Function linphone_core_get_calls(lc As IntPtr) As List(Of IntPtr) 
End Function 

und dann wie folgt aus:

Dim CurrentCallList As List(Of IntPtr) = linphone_core_get_calls(_LinPhoneCore) 

kompiliert, die aber gibt mir eine Fehlermeldung:

Cannot marshal 'return value': Generic types cannot be marshaled.

Jede Hilfe wäre sehr dankbar .

+0

Warum denken Sie, dass "bctbx_list_t" dasselbe ist wie "List" von .NET? Es ist fast sicher nicht; Finden Sie heraus, wo der 'bctbx_list_t' Typ definiert ist und sehen Sie, wie Sie ihn besser deklarieren können. Wenn es ein undurchsichtiges Objekt ist, deklarieren Sie es als IntPtr. – GSerg

+0

@GSerg Danke. –

Antwort

0

Basierend auf GSerg's Kommentar, suchte ich nach der Definition von bctbx_list_t, die ich here fand. Es ist eine verkettete Liste:

typedef struct _bctbx_list { 
    struct _bctbx_list *next; 
    struct _bctbx_list *prev; 
    void *data; 
} bctbx_list_t; 

Ich übersetzte das zu:

Private Structure _bctbx_list 
    Public [next] As IntPtr 
    Public prev As IntPtr 
    Public data As IntPtr 
End Structure 

Änderung der Import:

<DllImport(LIBNAME, CallingConvention:=CallingConvention.Cdecl)> 
Private Shared Function linphone_core_get_calls(lc As IntPtr) As _bctbx_list 
End Function 

Und ich bin im Geschäft.

Verwandte Themen