标签:type-conversion c-3 string c c-4
我正在使用带有C包装程序的C DLL,以便能够在不同的语言上使用它.现在,我也在C#中开发一个调用我的DLL的插件.
我想要的是将DLL(文件的路径)作为我的DLL的参数传递,以便能够在我的DLL上使用它.
C#
[DllImport(DllName, CallingConvention = DllCallingConvention)]
public static extern IntPtr AllocateHandle(string filename);
C包装
LPVOID SAMPLEDLL_API CALLCONV_API AllocateHandle(char* filename);
C类构造函数
CustomData::CustomData(char* filename)
{
_filename = filename; // string _filename;
}
当我将_filename保存在文件中时(因为我没有找到使用DLL上的断点进行调试的方法),我遇到了类似ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ0à×的问题.我尝试了不同的解决方案将char *转换为字符串,但结果仍然相同.
预先感谢您的帮助.
解决方法:
问题是C#中的字符串使用Unicode. cpp中的字符串是ansi字符串.您必须告诉C#字符串必须为ansi:
[DllImport(DllName.dll, CallingConvention=CallingConvention.StdCall, CharSet=CharSet.Ansi)]
static extern IntPtr AllocateHandle(string filename);
您还可以将字符串长度作为第二个参数传递,因此您可以知道cpp端的字符串长度是多少.
[编辑]
根据一些评论,您还可以尝试将[char *]更改为[wchar_t *],这是unicode.然后,您当然应该在C#端使用适当的属性:CharSet = CharSet.Unicode
标签:type-conversion,c-3,string,c,c-4 来源: https://codeday.me/bug/20191109/2012137.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。