сделать класс C ++ в нативной DLL для использования в C #

Я потратил около 3 дней на чтение этой темы ...

Я полностью потерян благодаря множеству уроков и отвечаю на вопросы о том, как создать собственную DLL. Если у вас есть немного свободного времени, пожалуйста, объясните немного о теме и помогите мне - если вы неу меня нет времени, просто перейдите к простой форме моего вопроса там ...

Вот что я знаю о теме до сих пор:

1) мне нужно использовать макрос, определенный как__declspec(ddlexport) а также__declspec(ddlimport) перед именем класса экспортировать все методы и переменные класса

2) мне нужно использоватьextern "C" где-то, но я не уверен, где именно

3) Есть много способов сделать это (передать класс в качестве параметра методам, которые его принимают; c подход / экспорт класса / использование интерфейса)

Вот почему и как я потерялся:

1) Большинство учебных пособий предназначены для экспорта методов, которые, я подозреваю, очень просты по сравнению с классами (в C # вы используете [Dllimport, имя DLL], затем вы вызываете каждый метод)

2) мне нужно использоватьextern "C" с занятиями или нет?

3) Если я использовал фабричный метод с интерфейсом, нужно ли мне распространять файл .h, содержащий интерфейс?

Вот что я хочу сделать:

1) создать C ++ DLL с классом в нем и экспортировать этот класс для использования в .NET или C ++ (я хочу защитить свой код, так как я видел, как легко можно отменить управляемый код с помощью сохраненного IL.)

2) Я хочу иметь 2 DLL, одну собственную C ++ DLL, а другую - DLL-оболочку, так что если кто-то хочет использовать мой класс в C ++, он может напрямую использовать собственную DLL и если он хочет использовать ее в C # / VB.net он может использовать DLL-оболочку C ++ / CLI ...

3) нет библиотек, файлов заголовков, файлов def, ... и т. Д. ..... только чистые библиотеки DLL (будет выпущено 2 файла)

Простая форма

Позволять'скажем, я хочу создать экземпляр объекта в C # из этого класса C ++

Class Human
{
 private:
    int Pee_Meter;
 public:
    Void Do_Pee()
       {
         //stuff here
       };
};

Что мне нужно делать, только базовые вещи? С наименьшим возможным количеством файлов и максимальной защитой кода, без освобождения заголовочных файлов или чего-либо еще, только с использованием DLL и, вероятно, TXT-файла, в котором упоминаются имена методов и вещи для использования в DLL.

Другими словами, правильны ли эти шаги?

1) В VS2012 создайте новый проект Win32, затем выберите DLL в качестве типа проекта

2) определить макрос /__declspec(ddlexport)__declspec(ddlimport) и использовать его перед именем класса (я должен использоватьextern "C" с занятиями? Возможно нет...)

3) Компилировать DLL

4) Создайте проект CLR в VS2012 для использования C ++ / CLI

5) Ссылка на родную DLL (я нене знаю как ??PInvoke весь класс ???????)

6) Определите класс-оболочку (который я все еще изучаю, но я думаю, что вы создаете метод в CLI для каждого метода в нативном классе)

7) Скомпилируйте DLL CLI

Должен ли я сказать, что у меня есть программы Deitel и Ditel C // Deitel и Ditel C ++ // C ++, написанные Д. С. Маликом, и ни в одной из этих трех книг не упоминается что-либо о создании DLL, что я считаю глупым.

Наконец, спасибо за каждую секунду, которую вы потратили на то, чтобы помочь мне, я действительно ценю каждую помощь, которую вы оказываете, даже если вы направили меня к учебнику, который я читал ранее ... Я мог что-то пропустить в нем :)

Ответы на вопрос(3)

Ваш ответ на вопрос