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