1

C#でpjsip(C-lib)をラップしています。

私の呼び出しは次のとおりです

var account = new pjsua_acc_config();
Accounts.pjsua_acc_config_default(account);

これにより、どちらが刺激されますか。

[DllImportAttribute("pjsua.dll", EntryPoint = "pjsua_acc_config_default", CallingConvention = CallingConvention.Cdecl, PreserveSig = true)]
public static extern void pjsua_acc_config_default([In, Out] pjsua_acc_config cfg);

にマップする

PJ_DEF(void) pjsua_acc_config_default(pjsua_acc_config *cfg)

ここで *cfg は 0x00a5e8a8 です

次の呼び出しは、デフォルトの構成を使用してアカウントを追加することなので、呼び出します

int id = Constants.PJSUA_INVALID_ID;
Accounts.pjsua_acc_add(account, 1, ref id);

これによって刺激されます。

[DllImportAttribute("pjsua.dll", EntryPoint = "pjsua_acc_add", CallingConvention = CallingConvention.Cdecl, PreserveSig = true)]
public static extern int pjsua_acc_add([In, Out]pjsua_acc_config acc_cfg, int is_default, ref int p_acc_id);

にマップする

PJ_DEF(pj_status_t) pjsua_acc_add( const pjsua_acc_config *cfg,                    int is_default, int *p_acc_id)

ここで *cfg は 0x00a5e888 で、32 ビットずれています。同じオブジェクトであるため、同じアドレスを指す必要があります。

Howerer、これを変更すると

public static extern void pjsua_acc_config_default([In, Out] pjsua_acc_config cfg);

の中へ

public static extern void pjsua_acc_config_default([In, Out] pjsua_acc_config cfg, pjsua_acc_config dummy1, pjsua_acc_config dummy2);

アドレスが整列します。これの原因は誰にもわかりますか?

4

1 に答える 1