将C++_TCHAR绑定到SWIG接口中的C#字符串
Binding a C++ _TCHAR to a C# string in a SWIG interface
我有一些旧的C++代码,我正试图将其编译为DLL,以便在C#Xamarin.IOS项目中使用,使用SWIG为C++和C#之间的包装器创建绑定。
到目前为止,我已经能够使它适用于所有接受或返回int
、double
或bool
参数的方法,但我一直被如何处理_TCHAR
s所困扰。
在C++代码使用_TCHAR
s作为参数类型的情况下,无论我在SWIG接口文件中尝试了什么,任何应该使用string
的方法的C#参数都会变成SWIGTYPE_p__TCHAR
,据我所知,这是SWIG在不知道应该使用什么时产生的结果。
我确信这应该是在SWIG接口文件中使用正确类型映射的情况,但到目前为止我所尝试的都没有奏效,任何建议都将不胜感激!
TCHAR
是一个预处理器定义的常量,在编译时windows.h
基于UNICODE
预处理器常量设置:如果定义了UNICODE
,它要么是wchar_t
,要么是char。但你必须选择一个:你的模块是unicode还是ascii?如果是前者,您应该将UNICODE设置为SWIG命令的一部分:
swig -DUNICODE -c++ -csharp example.i
其他
swig -c++ -csharp example.i
由于您可能正在执行后一种操作,并且出现了此错误,因此您可能忘记了在序言之后和声明之前使用%include <windows.i>
(如果您有问题,请显示您的.i
,然后我可以更具体地说明)。
最后,C++代码的维护人员将他的代码更改为使用标准的char
s,而不是_TCHAR
s,我成功地使其工作起来。