将C++_TCHAR绑定到SWIG接口中的C#字符串

Binding a C++ _TCHAR to a C# string in a SWIG interface

本文关键字:接口 字符串 SWIG C++ TCHAR 绑定      更新时间:2023-10-16

我有一些旧的C++代码,我正试图将其编译为DLL,以便在C#Xamarin.IOS项目中使用,使用SWIG为C++和C#之间的包装器创建绑定。

到目前为止,我已经能够使它适用于所有接受或返回intdoublebool参数的方法,但我一直被如何处理_TCHAR s所困扰。

在C++代码使用_TCHARs作为参数类型的情况下,无论我在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++代码的维护人员将他的代码更改为使用标准的chars,而不是_TCHARs,我成功地使其工作起来。