none
Dll(C++) и C# RRS feed

  • Вопрос

  • Пишу Dll на С++, хочу подключить к проекту на С#.

    Подключал через DLLImport, всё работает,но...
    Использование DllImport в моём случае не удобно, функции с 20-30 аргументами очень не удобно использовать. Следовательно нужны структуры из моей DLL.

    Пытаюсь подключить через ссылки и подключить моё пространство имён.
    Библиотека подключается к ссылкам, но моего пространства имён VS не видит.

    Пожалуйста подскажите как это исправить.
    Что-то читал про COM интерфейсы, но нормальной инфы найти не могу.

    16 августа 2015 г. 11:12

Ответы

  • Для Вас критично, что DLL на C++ содержит исключительно неуправляемый код? Если нет, сделайте ее управляемой библиотекой классов, используя C++\CLI и ссылайтесь на нее из C#, как на обычную сборку .net

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    17 августа 2015 г. 13:31
  • Все структуры которые у вас имеются в DLL должны быть в ручную продублированы в C#. По большей части это механическая процедура (сменить типы, изменить синтаксис). Иногда потребуетребуется добавиить атрибут для правильного преобразования данных. Некоторые случаи, например структуры переменных размеров, могут быть проблематичны. Однако так как это ваш код то вы можете исправить проблему на стороне C++.

    COM я бы не рекомендовал, возни будет значительно больше. 

    Примеры для конкретных случаев можно найти на просторах интернета, например на сайте pinvoke.net.



    This posting is provided "AS IS" with no warranties, and confers no rights.

    16 августа 2015 г. 16:37
    Модератор

Все ответы

  • Все структуры которые у вас имеются в DLL должны быть в ручную продублированы в C#. По большей части это механическая процедура (сменить типы, изменить синтаксис). Иногда потребуетребуется добавиить атрибут для правильного преобразования данных. Некоторые случаи, например структуры переменных размеров, могут быть проблематичны. Однако так как это ваш код то вы можете исправить проблему на стороне C++.

    COM я бы не рекомендовал, возни будет значительно больше. 

    Примеры для конкретных случаев можно найти на просторах интернета, например на сайте pinvoke.net.



    This posting is provided "AS IS" with no warranties, and confers no rights.

    16 августа 2015 г. 16:37
    Модератор
  • Для Вас критично, что DLL на C++ содержит исключительно неуправляемый код? Если нет, сделайте ее управляемой библиотекой классов, используя C++\CLI и ссылайтесь на нее из C#, как на обычную сборку .net

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    17 августа 2015 г. 13:31