2017-01-13 3 views
1

問題のAPIリファレンスはhereです。vbでlinphone_core_get_callsをインポートして呼び出すにはどうすればよいですか?

私はどのようにDLLIMPORT適切に知っているし、その後、VBでこれを使用する必要があります。

const bctbx_list_t* linphone_core_get_calls ( LinphoneCore * lc ) 

私はとのトラブルを抱えている部分がconst bctbx_list_t*戻り値です。

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

し、このようにそれを使用して::

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

コンパイルしますが、私にエラー与える:任意の助けをいただければ幸いです

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

を私はこのようなDLLIMPORTを宣言しようとしました。

+0

なぜ、 'bctbx_list_t'は.NETの' List'と同じだと思いますか?それはほとんど間違いない。 'bctbx_list_t'型がどこで定義されているかを見て、それをより良く宣言する方法を見てください。それが不透明なオブジェクトなら、 'IntPtr'として宣言してください。 – GSerg

+0

@GSergありがとうございました。 –

答えて

0

GSergのコメントに基づいて、私はhereというbctbx_list_tの定義を探しました。これは、リンクされたリストです:に

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

インポートを変更:

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

は私がすることを翻訳

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

そして、私はビジネスにいますよ。

関連する問題