Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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#程序传递一个uint[],其中包含一个指向C+的字符串指针+;动态链接库 我知道有很多关于把指针从C程序传递到第三方C++ DLL的讨论。但我的情况很特殊 我有一个第三方C++ DLL,我在其中调用一个函数: [DllImport(@"ThirdParty.DLL", EntryPoint = "?ThirdPartyEntryPoint", CallingConvention = CallingConvention.Cdecl)] public static extern Int16 ThirdParty_command(uint p1, ushort p2, uint[] data); 现在,棘手的事情是“Unt[]数据”中的一个元素是指向C++中的字符串的字符串指针(类型:unChar char)。我试过这个,但不起作用: String name = "myName"; fixed (char* nameAddress = name) { uint[] data = { 0x00, 0x01, 0x02,(uint) nameAddress }; Int16 result = ThirdParty_command(0, 0, data); }_C#_String_Pointers - Fatal编程技术网

C#程序传递一个uint[],其中包含一个指向C+的字符串指针+;动态链接库 我知道有很多关于把指针从C程序传递到第三方C++ DLL的讨论。但我的情况很特殊 我有一个第三方C++ DLL,我在其中调用一个函数: [DllImport(@"ThirdParty.DLL", EntryPoint = "?ThirdPartyEntryPoint", CallingConvention = CallingConvention.Cdecl)] public static extern Int16 ThirdParty_command(uint p1, ushort p2, uint[] data); 现在,棘手的事情是“Unt[]数据”中的一个元素是指向C++中的字符串的字符串指针(类型:unChar char)。我试过这个,但不起作用: String name = "myName"; fixed (char* nameAddress = name) { uint[] data = { 0x00, 0x01, 0x02,(uint) nameAddress }; Int16 result = ThirdParty_command(0, 0, data); }

C#程序传递一个uint[],其中包含一个指向C+的字符串指针+;动态链接库 我知道有很多关于把指针从C程序传递到第三方C++ DLL的讨论。但我的情况很特殊 我有一个第三方C++ DLL,我在其中调用一个函数: [DllImport(@"ThirdParty.DLL", EntryPoint = "?ThirdPartyEntryPoint", CallingConvention = CallingConvention.Cdecl)] public static extern Int16 ThirdParty_command(uint p1, ushort p2, uint[] data); 现在,棘手的事情是“Unt[]数据”中的一个元素是指向C++中的字符串的字符串指针(类型:unChar char)。我试过这个,但不起作用: String name = "myName"; fixed (char* nameAddress = name) { uint[] data = { 0x00, 0x01, 0x02,(uint) nameAddress }; Int16 result = ThirdParty_command(0, 0, data); },c#,string,pointers,C#,String,Pointers,可能是因为无符号字符*通常是字节[],而不是uint[]。检查C端需要什么类型的字符串,您可能需要将UTF-16(C#string)转换为其他编码,如UTF-8。您所说的“不工作”是什么意思?不会编译吗?例外?请通过张贴您收到的任何错误消息来说明具体情况。您的混音Int16(内部名称)与uint(简写名称)。为什么?publicstaticextern short…这肯定是一个结构,而不是uint[]?它可以编译。第三方.dl给出了“太多参数”的错误,抱歉,在我的第一个问题中,C++指针是“ch

可能是因为
无符号字符*
通常是
字节[]
,而不是
uint[]
。检查C端需要什么类型的字符串,您可能需要将UTF-16(C#string)转换为其他编码,如UTF-8。

您所说的“不工作”是什么意思?不会编译吗?例外?请通过张贴您收到的任何错误消息来说明具体情况。您的混音
Int16
(内部名称)与
uint
(简写名称)。为什么?
publicstaticextern short…
这肯定是一个结构,而不是uint[]?它可以编译。第三方.dl给出了“太多参数”的错误,抱歉,在我的第一个问题中,C++指针是“char *”,而不是“unChar char”,是的,你是对的。正如我前面提到的,C++指针是一个“char *”,我创建了一个小的C++和C++项目,用来测试一个Unt数组,它包含指向一个字符串的指针。我使用“IntPtr ptr=Marshal.StringToCoTaskMemAnsi(myString)”获取指针并将其存储在数组中。C++端可以检索字符串而无任何问题。所以这可能是第三方dll的问题