2

パナソニックのpbx内線のサービスクラスを変更する簡単な電話アプリケーションに取り組んでいます。そのために私はc++のメソッドを持つ「Tapi32.dll」を使用しています。今、私の必要に応じて、2つの引数を両方とも整数ポインタ型に渡す必要があります。1つの引数は正しく渡されますが、構造体タイプである2番目の引数を渡すことができません。

これが私のコードです...

[DllImport("Tapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
unsafe private static extern int lineDevSpecific(int* hLine, int* lpParams);

[StructLayout(LayoutKind.Sequential)]
public struct UserRec {
    [MarshalAs(UnmanagedType.I4)]
    public int dwMode=4;
    public int dwParam1=8;
}

unsafe static void Main(string[] args) {
    int vline=int.Parse("Ext101");
    int* hline = &vline;
    lineDevSpecific(hline, ref UserRec userrec);
}
4

1 に答える 1

2
[DllImport("Tapi32.dll", SetLastError=true)]
unsafe private static extern int lineDevSpecific(int* hLine, IntPtr lpParams);

unsafe static void Main(string[] args) {
    int vline=int.Parse("Ext101");
    int* hline=&vline;

    var sizeUserRec=Marshal.SizeOf(typeof(UserRec));
    var userRec=Marshal.AllocHGlobal(sizeUserRec);
    lineDevSpecific(hline, userRec);
    var x=(UserRec)Marshal.PtrToStructure(userRec, typeof(UserRec));
    Marshal.FreeHGlobal(userRec);
}

この質問の答えを見てください

マーシャリングをより簡単に、より再利用できるようにするために、さらにいくつかを見つけることができます。

于 2013-03-04T08:30:11.923 に答える