Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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+;获取字符串/字符值+;返回字符指针的函数 我用C++编写了一个DLL。此DLL的函数类似于以下代码:_C#_C++_Marshalling_Char Pointer - Fatal编程技术网

C#从C+;获取字符串/字符值+;返回字符指针的函数 我用C++编写了一个DLL。此DLL的函数类似于以下代码:

C#从C+;获取字符串/字符值+;返回字符指针的函数 我用C++编写了一个DLL。此DLL的函数类似于以下代码:,c#,c++,marshalling,char-pointer,C#,C++,Marshalling,Char Pointer,C++代码: char _H *GetPalette() { -------Functions body -------Functions body return pPaletteString; } 现在我想从C代码中的GetPalette()函数中获取托盘字符串 如何从该函数中获取字符串? 我在C代码中尝试过这个。但是没有得到正确的结果 C#代码: 最后,我想得到这样的字符串

C++代码:

     char _H *GetPalette() {

            -------Functions body

            -------Functions body

            return pPaletteString;

      }
现在我想从C代码中的GetPalette()函数中获取托盘字符串

如何从该函数中获取字符串? 我在C代码中尝试过这个。但是没有得到正确的结果

C#代码:

最后,我想得到这样的字符串

            IntPtr result;
            result = imgProcess.GetPallet();

            string pallet;
            pallet = Marshal.PtrToStringAnsi(result);
            MessageBox.Show(pallet);
此代码无法正常工作。 我可以从我的C++ DLL函数中得到字符串值吗?< /P> 谢谢


Shahriar

您已经告诉C#调用约定是
\uu stdcall
,但是没有证据表明函数本身有
\uu stdcall
标记。此外, char */COD>可以是UTF-8.

< P>可以用字符串返回类型定义C++代码中的C++函数。
[DllImport("cl.dll")]
private static extern string GetPalette();
而不是简单地从C代码中调用它


DllImport
属性中,您可能需要设置正确的调用约定
CallingConvention
和字符编码
CharSet

最好定义您得到的错误或行为。我们怎么知道“此代码无法正常工作”是什么意思?我从该代码中获得了'-->'字符。但它应该返回类似于“473757.473767.574767………..”字符串的值。实际上,我是.net互操作性/编组方面的新手。我使用了其他来源的stdcall约定代码。也许我错了。那么,现在我能做什么来从C++的DLL函数中获取字符串呢?感谢您改变C代码以匹配C++代码的调用约定将是一个开始。我想您可能想解释返回缓冲区的OnWalvice语义(Irc.net将用For()来释放内存)谢谢Lukas Kabrt。你的答案100%正确。我使用了CharSet=CharSet.Ansi并将函数的返回类型更改为string。现在我得到了正确的结果。
[DllImport("cl.dll")]
private static extern string GetPalette();
string palette = GetPalette();