Witam,
Jak zaimportować do C# poniższą strukturę?
typedef struct pjsua_call_info
{
pjsua_call_id id;
pjsip_role_e role;
pjsua_acc_id acc_id;
pj_str_t local_info;
pj_str_t local_contact;
pj_str_t remote_info;
pj_str_t remote_contact;
pj_str_t call_id;
pjsip_inv_state state;
pj_str_t state_text;
pjsip_status_code last_status;
pj_str_t last_status_text;
pjsua_call_media_status media_status;
pjmedia_dir media_dir;
pjsua_conf_port_id conf_slot;
pj_time_val connect_duration;
pj_time_val total_duration;
struct {
char local_info[128];
char local_contact[128];
char remote_info[128];
char remote_contact[128];
char call_id[128];
char last_status_text[128];
} buf_;
} pjsua_call_info;
w c# mam natomiast takie cos:
[StructLayout(LayoutKind.Sequential)]
public struct pjsua_call_info
{
public int id;
public pjsip_role_e role;
public int acc_id;
public pj_str_t local_info;
public pj_str_t local_contact;
public pj_str_t remote_info;
public pj_str_t remote_contact;
public pj_str_t call_id;
public pjsip_inv_state state;
public pj_str_t state_text;
public pjsip_status_code last_status;
public pj_str_t last_status_text;
public pjsua_call_media_status media_status;
public pjmedia_dir media_dir;
public int conf_slot;
public pj_time_val connect_duration;
public pj_time_val total_duration;
[StructLayout(LayoutKind.Sequential)]
public struct buf_
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string local_info;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string local_contact;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string remote_info;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string remote_contact;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string call_id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string last_status_text;
}
}
I chodzi mi konkretnie o ta wewnętrzną strukturę buf_.
Funkcja wywołująca wygląda następująco :
[DllImport(PJSIP_DLL, EntryPoint = "pjsua_call_get_info")]
public static extern int pjsua_call_get_info(int call_id, out pjsua_call_info info);
pjsua_call_info callInfo;
pjsua_call_get_info(session, out callInfo);
Po jej wywołaniu pojawia się (albo czasem się nie pojawia) wyjątek: Zgłoszono wyjątek typu 'System.ExecutionEngineException'.
Cały opis struktury dostępny jest pod adresem: http://www.pjsip.org/pjsip/docs/html/structpjsua__call__info.htm
ps. Chciałem zrobić z tego linka, ale coś źle reaguje na "__".