在c++中回调c#函数遇到的字符串问题
来源:互联网 发布:换手率选股软件 编辑:程序博客网 时间:2024/05/16 05:05
在工作中需要在c++代码中回调c#写的一个函数,但这个函数返回的是字符串。以前的c++代码是使用MBMS编译的,没有发现什么问题。但现在c++代码升级后改为了unicode编译,结果问题出来了。
在c++代码中有LPCTSTR res = funcXXX();此时res中全是乱码,在内存中观察,发现返回的字符串是ANSI类型的,当作UNICODE使用时自然是乱码了。
在MSDN中阅读了关于互操作的文档,发现并没有针对c++回调C#的注意事项说明,于是网上GOOGLE,发现了蛛丝马迹。原来在这种情况下,并未指明如果使用返回的c# string。可能是在从.net返回到native时,自动的转换为ANSI类型。这是应该是指明返回类型为IntPtr。示例如下:
【C#函数】
public static IntPtr Report(IntPtr _x)
{
string x = Marshal.PtrToStringUni(_x);
string res = x + x;
return Marshal.StringToCoTaskMemUni(res);
}
【C++函数】
PINVOKETESTDLL_API int doCallback()
{
if (g_callback)
{
LPCTSTR info = g_callback(strInfo);
int l = 0; //在此断下后观察info。
}
return 0;
}
在阅读StringToCoTaskMemUni()文档后,觉得在c++代码中还是应通过CoTaskFree()来说释放得到的字符串。
- 在c++中回调c#函数遇到的字符串问题
- C#调用C++DLL时遇到的PInvoke 函数的调用导致堆栈不对称问题
- 在C遇到的第一个问题!
- 在C++中调用C写的函数(使用lex_yacc遇到的问题)
- C#开发之遇到的一些字符串问题
- C#遇到的问题
- C#调C的动态库遇到的问题
- 字符串问题--C里面的strcpy函数
- 在解析Json格式字符串时遇到的问题
- 学习C#在tyr catch finally 中遇到的问题
- C#在获取Excel时,遇到的各类问题汇总
- C#中的字符串函数问题
- 浅议C编程中遇到scanf函数的一些问题
- C编程中scanf函数遇到的问题
- C#的字符串函数
- 【原创】在JSTL 标签中遇到的c:foreach问题
- 在C中遇到的一个问题 很彪悍
- 在LUA与C交互中遇到的问题
- some useful technology english
- Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围。
- DXUT框架剖析(9)
- C#操作Excel(导入导出)
- C# DataTable的詳細用法
- 在c++中回调c#函数遇到的字符串问题
- DXUT框架剖析(10)
- StringUtils
- DXUT框架剖析(11)
- 【转载】UBoot下添加OV9650寄存器操作的命令
- 简单内存泄漏检测方法 解决 Detected memory leaks! 问题
- Cannot get a connection, pool exhausted解决办法
- oracle闪回确实好用啊!!!!
- DXUT框架剖析(12)