1

我需要使用这个(非托管)C++ 库。其中一种方法具有 wchar_t* 作为参数。尝试在 C# 中使用它,但我所有的尝试都导致错误代码“无效参数”。

我为它写了一个托管的 C++ 包装器——同样的问题。现在我比较了我的 C++ 包装器和库附带的本机 C++ 示例中的参数值。我看到的唯一显着区别是我的托管 C++ 中的 NUL 是“0 L''”(Visual Studio watch),而非托管示例中的 NUL 只是“0”。它们都具有相同的值... 0。

这真的是问题吗?(我尝试手动将该字符设置为“0”但得到相同的结果)如果是,我该如何解决?

编辑:图片: http: //img6.imageshack.us/img6/5977/comparisonofvalues.png 好的,左侧是我的代码(托管 C++),右侧是示例(非托管 C++)。事实上,右边的工作,左边的不是(函数拒绝参数)。我认为问题在于第 17 个字符 - NUL。还有什么想法吗?

4

2 回答 2

1

调试器的区别只是外观。您会注意到调试器通常显示两个值:二进制值和匹配的 Unicode 字符。但是您不能为二进制值 0 显示 Unicode 字符。两个调试器处理它的方式略有不同(显示L''与不显示),但内存中的位是相同的。

另一方面,你的ip字符串是垃圾。

于 2011-09-26T13:34:50.997 回答
0

您可以检查您的项目属性。有一个编译器选项控制 wchar_t 是否被视为内置类型。将此设置为 NO 将使用 wchar_t 的旧标头定义,并且可能会解决您的问题。

于 2011-09-23T19:31:26.033 回答