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的问题