0

何が間違っているのか本当にわかりません。ネット状態の多くの例として、C# から C で記述された dll に文字列を渡しています。何らかの理由で、文字列が C dll で NULL として出力されます。私が間違っていることについて何か考えはありますか?

子:

 extern __declspec(dllexport) void Cmd(long CmdType,long DataPar, const char *DataStr);

 void Cmd(long CmdType,long DataPar,const char *DataStr)
 {
     // DataStr is NULL here even when passing a string with data in it
 }

C#:

    [DllImport(@"pjsua-i386-Win32-vc8-Debug.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]

    public static extern void Cmd(long CmdType, long DataPar,[MarshalAs(UnmanagedType.LPStr)]String s);

    Cmd(1,0,"TEST");

IntPtr や文字列全体のマーシャリングなどの他のことも試しましたが、すべて NULL で同じことがわかりました。また、他のものもたくさん。

4

2 に答える 2

0

以下のオプションを試しましたか:

    [DllImport(@"pjsua-i386-Win32-vc8-Debug.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    public static extern void Cmd(int CmdType, int DataPar,IntPtr s);

    Cmd(1,0,Marshal.StringToHGlobalAnsi(str));
于 2013-06-07T10:37:45.963 に答える