2014-04-09 4 views
0

У меня есть старый код на C++, который я пытаюсь скомпилировать как DLL, чтобы его можно было использовать в проекте C# Xamarin.IOS, используя SWIG для создания привязок для обертки между C++ и C#.Связывание C++ _TCHAR с строкой C# в интерфейсе SWIG

До сих пор я был в состоянии заставить его работать для всех методов, которые принимают или возвращают int, double или bool параметров, но я застрял, как бороться с _TCHAR с.

Если код C++ использует _TCHAR S как типы параметров, независимо от того, что я пытался в файле интерфейса SWIG, C# параметры для любых методов, которые должны принять string придумывают, как SWIGTYPE_p__TCHAR, который до как я могу сказать, это то, что производит SWIG, когда он не знает, что он должен использовать.

Я уверен, что это должен быть случай использования правильной карты в файле интерфейса SWIG, но ничего, что я пробовал до сих пор, не работал, любые предложения были бы высоко оценены!

ответ

0

В конце концов, сопровождающий код C++ изменил свой код, чтобы использовать стандарт char s вместо _TCHAR, и мне удалось получить эту работу.

0

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, то я могу быть более конкретным).

Смежные вопросы