【发布时间】:2011-11-23 19:38:18
【问题描述】:
我需要使用这个(非托管)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。 还有什么想法吗?
【问题讨论】:
-
wchar_t*是一个以 null 结尾的字符串。除此之外,在您展示一些代码并详细说明非托管库期望传递的内容之前,我无能为力。 -
C++/CLI 没有 NUL 或 NULL,它有 nullptr。您的手表没有多大意义,但看起来像一个空字符串 L""。与空指针不同。您必须在 C# [DllImport] 声明中使用 CharSet.Unicode。
-
sec如何获得它的价值? -
sec 只是一个指针,它在初始化时给出。我正在使用它而其他功能没有问题。这是给我带来麻烦的那个(顺便说一句,它是唯一一个带有 'const wchar_t*' 的参数)。
-
好的,我应该指出我的代码可能没有问题。我使用的模拟器的行为与实际硬件不同。所以,基本上,这是一个糟糕的问题。很抱歉浪费了你们的时间,感谢你们的帮助。