2014-12-09 4 views
0

У меня есть DLL, которая была создана на C++ с использованием Qt. Но у меня есть файлы проекта, чтобы открыть его в Visual Studio и отредактировать его и многое другое. Я хочу иметь возможность использовать эту библиотеку в приложении C#, которое я создаю. Итак, что мне нужно сделать для проекта, чтобы сделать его ссылкой в ​​приложении C#?Создание .NET Wrapper для DLL

Я читаю все о PInvoke, создавая .NET-обертку и т. Д., И я не уверен, что лучший вариант и как это сделать.

+0

Есть ли у вас доступа к источнику? –

+0

Да, да. У меня есть весь проект. – Minato

+0

Хорошо. Я сделал .NET-обертку для классов C++ на прошлой неделе, но я мог только заставить ее работать, когда я скомпилировал исходный код в проекте C++/CLI, который содержал как родные классы (* .hpp, * .cpp), так и мои управляемые C++ классы ('public ref class Foo {};') –

ответ

1

Вы можете создавать классы .NET-оболочки для классов C++, создавая новый проект C++/CLI в своем решении, и для каждого класса, в котором вам действительно нужна оболочка, добавьте новый элемент Managed.ClassName.cpp и проверьте шаблон ниже.

Managed.Rand.cpp (это будет новый файл в вашем C++/CLI проекта, и предполагается, ваш родной проект называется «Логика» и Rand класс находится в Logic пространстве имен)

#include "../Logic/Rand.cpp" 

using namespace System; 

namespace Logic { 
    namespace Managed { 
     public ref class Rand { 
      Logic::Rand * rand; 
     public: 
      Rand(UInt32 seed) { rand = new Logic::Rand(seed); } 
      !Rand() { delete rand; } 
      ~Rand() { this->!Rand(); } 

      // Wrapper methods 
      UInt32 Next() { return rand->Next(); } 
     }; 
    } 
} 

Помните, что метод !ClassName (класс деструктора) заставляет класс автоматически реализовывать IDisposable, поэтому вы должны обернуть свои экземпляры Managed.ClassName в конструкцию использования или позвонить по телефону Dispose, когда вы закончите. Короче говоря, здесь применяются обычные шаблоны использования IDisposable.

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