我真的不确定我做错了什么。我正在将一个字符串从 C# 传递给我用 C 编写的 dll,作为网络状态上的许多示例。由于某种原因,该字符串在 C dll 中以 NULL 的形式出现。知道我做错了什么吗?
C:
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 相同。还有一堆其他的东西。