2016-07-06 2 views
-2

Мой C# код использует сторонние библиотеки, написанные на C++ и с использованием Swig, чтобы обернуть его в C# (три проекта здесь, MyCodeCS, ThirdCpp и ThirdCs)Swig TypeMap внутренний конструктор защищаемого

Таким образом, если У меня есть класс Acpp с общедоступными конструкторами Acpp() и Acpp(int) в cpp, я заканчиваю в завернутой версии C# с классом Acs, правильно определенными конструкторами Acs() и Acs(int) (пока что так хорошо), причем оба из них используют внутреннюю, конструктор: Acs(IntPtr cPtr,bool).

(Конечно, как касты и классы CS названы A, но для ясности я назвал их с СРР и ц.п. суффиксами)

Теперь я интегрирующий модулем нового CPP (MyCodeCpp), который содержит класс Bcpp, который наследуется от Acpp. Пока что так хорошо: Bcpp наследует от Acpp, и я могу назвать его с моего кода на C# без проблем, используя его .

Моя проблема заключается в том, что для того, чтобы объекты Bcs распознавались как Acs, мне нужно определить такой класс Bcs. Который является довольно тупой один, так как я уже получил CPTR:

public class Bcs : Acs 
{ 
    public Bcs(IntPtr cptr): base(cptr,true){} 
} 

Дело в том, ... Acs(IntPtr,bool) является внутренним, что означает, что если я хочу сделать, что мне нужно либо:

  • добавьте Bcs в проект ThirdCS и перестройте thirdCS, что я и делаю прямо сейчас, и который отлично работает, но не нравится моему главному архитектору, потому что теперь у нас есть класс, который должен принадлежать MyCodeCS, как оболочка для класса MyCodeCpp, который на самом деле принадлежит третьим лицам
  • как-то модифицировать поведение swig IOR, так что Acs(IntPtr,bool) защищен внутренней вместо внутренней, поэтому его можно назвать по MyCodeCS основе BCS класса

Дело в том: я понятия не имею, как это сделать, или даже, если это возможно?

Большое спасибо

+0

Вы можете показать примеры .i файлы? – AndyG

+0

Хотя я уверен, что ваш вопрос имеет простое решение, очень сложно понять основную проблему только с помощью слов. Можете ли вы показать * минимальный * полный пример, все, что мне нужно, чтобы попробовать его в моей среде разработчиков? Я даже не могу убедить себя, что вы на самом деле пытаетесь решить правильную проблему. – Flexo

ответ

1

решил это. просто необходимо поставить

SWIG_CSBODY_PROXY(public, public, SWIGTYPE) 
SWIG_CSBODY_TYPEWRAPPER(public, public, public, SWIGTYPE) 

в моей .i файле

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