Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#调用非托管C驱动程序(dll)_C#_C_Marshalling_Unmanaged - Fatal编程技术网

C#调用非托管C驱动程序(dll)

C#调用非托管C驱动程序(dll),c#,c,marshalling,unmanaged,C#,C,Marshalling,Unmanaged,我真的不确定我做错了什么。我正在将一个字符串从C#传递到我用C编写的dll,就像网络状态中的许多示例一样。由于某种原因,该字符串在C dll中显示为NULL。知道我做错了什么吗 C: C#: 我也尝试过其他方法,比如IntPtr和跨字符串编组,但结果都是NULL。还有一组其他的东西。 < P>在微软C++和C中,在32位和64位的构建中,长只有32位。 然而,在C#中,long总是64位 我认为发生的是C++中调用的两个64位长的字节中的一些字节被作为C++中的数据*/COD>弹出, 因为您正在

我真的不确定我做错了什么。我正在将一个字符串从C#传递到我用C编写的dll,就像网络状态中的许多示例一样。由于某种原因,该字符串在C dll中显示为NULL。知道我做错了什么吗

C:

C#:


我也尝试过其他方法,比如IntPtr和跨字符串编组,但结果都是NULL。还有一组其他的东西。

< P>在微软C++和C中,在32位和64位的构建中,长只有32位。 然而,在C#中,long总是64位

我认为发生的是C++中调用的两个64位长的字节中的一些字节被作为C++中的<代码>数据*/COD>弹出,

因为您正在推送的第二个参数是0,所以值为0的字节恰好用于指针,因此它是空的


将声明更改为
int
而不是
long
,以解决您的问题。

您是否尝试了以下选项:

    [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));
    [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");
    [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));