У меня есть какой-то старый код C ++, который я пытаюсь скомпилировать как DLL, чтобы его можно было использовать в проекте C # Xamarin.IOS, используя SWIG для создания привязок для оболочки между C ++ и C #.
До сих пор я был в состоянии заставить его работать для всех методов, которые принимают или возвращают int
, double
, или же bool
параметры, но я застрял с тем, как бороться с _TCHAR
s.
Где используется код C ++ _TCHAR
в качестве типов параметров, независимо от того, что я пробовал в файле интерфейса SWIG, параметры C # для любых методов, которые должны принимать string
подходят как SWIGTYPE_p__TCHAR
Насколько я могу судить, SWIG производит, когда не знает, что ему следует использовать.
Я уверен, что это должен быть случай использования правильной карты типов в файле интерфейса SWIG, но ничего из того, что я пробовал до сих пор, не сработало, любые предложения будут высоко оценены!
TCHAR
константа, определяемая препроцессором, которая устанавливается во время компиляции windows.h
на основе UNICODE
константа препроцессора: если UNICODE
определяется, это будет либо wchar_t
в противном случае это будет символ. Но вы должны выбрать один: ваш модуль Unicode или ASCII? Если первое, вы должны установить UNICODE как часть вашей команды SWIG:
swig -DUNICODE -c++ -csharp example.i
еще
swig -c++ -csharp example.i
Поскольку вы, вероятно, делаете последнее и получаете эту ошибку, вы, вероятно, забыли %include <windows.i>
после преамбулы и перед вашими заявлениями (если у вас возникли проблемы, покажите .i
тогда я могу быть более конкретным).
В конце концов, разработчик кода C ++ изменил свой код, чтобы использовать стандартные char
с вместо _TCHAR
и мне удалось заставить это работать.