Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
-15 / 10 / 6
Регистрация: 03.10.2012
Сообщений: 532

Передача экземпляра обьекта в функцию dllexport

14.05.2017, 16:03. Показов 2112. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, столкнулся с такой проблемой. Вот рабочий код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>;
#include <iostream>;
#using <SharpFunction.dll>
 
using namespace std;
using namespace SharpFunction;
 
 
extern "C"
{
    __declspec(dllexport) void HelloWorld()
    {
        cout << "Hello World" << endl;
        SharpFunction::Class1::HelloWorld2();
 
        Class1^ example = gcnew Class1();
        example->HelloWorld3();
    }
}
Тобишь я могу обьявить C# экземпляр в плюсах и это работает. Но вот мне нужно передать из C# в C++ экземпляр что бы плюсы в дальнейшем работали с экземпляром и по идеи получается вот такой вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>;
#include <iostream>;
#using <SharpFunction.dll>
 
using namespace std;
using namespace SharpFunction;
 
 
extern "C"
{
    __declspec(dllexport) void HelloWorld(Class1^ example)
    {
        cout << "Hello World" << endl;
        SharpFunction::Class1::HelloWorld2();
 
        example->HelloWorld3();
    }
}
и в таком случае компилятор мне выдает ошибку именно при компиляции:
C3395 HelloWorld: __declspec(dllexport) невозможно применять к функции с соглашением вызова __clrcall \MathFuncsDll\MathFuncsDll.cpp:12 Line
Как можно избежать данной ошибки?

Добавлено через 5 часов 38 минут
Что? Совсем не кто не знает? На столько не тривиальная задача?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2017, 16:03
Ответы с готовыми решениями:

Передача в функцию обьекта
Всем привет. В интернете ничего не нашел по этому поводу: Я делаю шашки и у меня есть класс USER и два производных COMPUTER и GAMER....

Передача свойств обьекта в функцию openGL
Здравствуйте уважаемые форумчане..Пришел к вам со следующей нуждой: У меня есть класс тайловой карты. При создании карты...

Передача экземпляра собственного класса в функцию
У меня есть класс MyClass с полями X, Y , Radius, Id. Еще в нем есть функция-член. Возможно ли с помощью языка F# передать параметром в эту...

12
-15 / 10 / 6
Регистрация: 03.10.2012
Сообщений: 532
17.05.2017, 14:45  [ТС]
Ребята! Проблема актуальна! РЕБЯТА!

Решил проблему с этой ошибкой но проблема появилась в другом - C# мне говорит что нет такой точки входа.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18267 / 14190 / 5368
Регистрация: 17.03.2014
Сообщений: 28,879
Записей в блоге: 1
17.05.2017, 15:03
Цитата Сообщение от SkoTi Посмотреть сообщение
проблема появилась в другом - C# мне говорит что нет такой точки входа.
Посмотри с помощью dumpbin какие функции экспортирует твоя DLL
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
17.05.2017, 15:11
А зачем экспортировать managed метод, да еще через dllexport, если его можно и так вызвать из C# без всяких проблем? Создайте обычный managed class, в нем статический метод и вызывайте из C# или любого другого .NET языка...
0
-15 / 10 / 6
Регистрация: 03.10.2012
Сообщений: 532
18.05.2017, 05:25  [ТС]
Мне нужно написать модификацию для сервера игры, У нас пытливые умы любят дампать C# и юзать их потом в открытую. Я хочу сделать жосткую подвязку а возможно и связку. А игра на Unity3d - тобишь весь код игры это C# dll
И там к примеру есть класс BasePlayer - и экземпляр данного класса из C# из хука мне нужно передать в обработчик действий в C++
Допустим что бы юзнуть у данного экземпляра метод с нужными параметрами в плюсах.
Да и не только такое делать, в общем у меня получится гибрид так как с C# я уже сижу около 3х лет да и вся моя работа подвязана на C# но в связи с потребностью в защите ПО от ололо рефлекторщиков да и юзать определенные функции WindowsAPI нужно.

Помогите =(

Добавлено через 58 секунд
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Посмотри с помощью dumpbin какие функции экспортирует твоя DLL
Просветите пожалуйста, ненашел не чего в гугле дельного кроме dumpbin.exe

Добавлено через 11 часов 33 минуты
Тоесть проблема не решаема?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
18.05.2017, 06:04
Нельзя просто так взять и передать managed объект в unmanaged код. Можно передавать простые вещи типа указателей, структур, массивов структур, делегатов и т.д.
0
-15 / 10 / 6
Регистрация: 03.10.2012
Сообщений: 532
18.05.2017, 06:37  [ТС]
Я читал гдето что можно пометить - managed или unmanaged код.
Мне любым способом нужно передать в C++ обьект. Ведь в самих же плюсах я могу его создать! А почему передать не могу дестопер на него?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
18.05.2017, 15:51
Передать можете, но не через dllexport, а по нормальному, создав класс и в нем метод принимающий объект в качестве параметра....
0
-15 / 10 / 6
Регистрация: 03.10.2012
Сообщений: 532
18.05.2017, 16:46  [ТС]
Someone007, Продемонстрируйте пожаалуйста пример. Тоесть здесь тоже самое что extern "C" dllexport
только без данных атрибутов - а просто обычный класс и попробывать его вызвать? но как сделать тогда так что бы метод был точкой входа - вот в чем вопрос заключается.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
18.05.2017, 19:21
Ну вот пример, 2 библиотеки, одна на C#, вторая на C++/CLI, и консольное приложение на C# которое создает класс из библиотеки на C# и передает его в класс из библиотеки на С++/CLI...

Точку входа сделать нельзя. Зачем она вам нужна вообще если вы сами вызываете метод?
Вложения
Тип файла: zip ConsoleApp2.zip (12.9 Кб, 6 просмотров)
1
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
19.05.2017, 01:37
Лучший ответ Сообщение было отмечено SkoTi как решение

Решение

Добавил еще один, более извращенный способ передачи объекта...
Вложения
Тип файла: zip ConsoleApp2.zip (13.2 Кб, 2 просмотров)
1
-15 / 10 / 6
Регистрация: 03.10.2012
Сообщений: 532
19.05.2017, 07:48  [ТС]
Someone007, Ваш второй вариант это как бы вроде то что мне и нужно было. Я всё перепробывал - и я даже не думал что нужно в атребутах писать void

Вот только беда... Я взял DLL плюсовскую и оказалось что это вообще не плюсы! это C#!!!! написаный на C++
В общем полное разочерование... Где ваша там DLL? Я сейчас за меньше минуты перепишу её с помощью IL кода. так как там изи вообще.
А я как раз и пытаюсь избавится от этого =( От прямого чтения исходного кода файла и частичная или почти полная защита от простого редактирования.
В общем разочерование, вот ваш исходный код в читабельном виде


Я именно ищу способ реализации как у steam_api.dll Что бы открыть нельзя было - а юзать можно.
Я так понимаю CLR мне не подходит =( А нужно юзать чистые плюсы а там не using, не обьектов из C# =( ну чтож, пошел капать =(
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
19.05.2017, 15:11
Вот только кода второго, извращенного варианта вы в обычном .NET декомпиляторе уже не увидите, вы ведь именно этого и хотели, разве нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.05.2017, 15:11
Помогаю со студенческими работами здесь

Странный порядок вызова конструкторов и передача временного обьекта в функцию в качестве неконстантной ссылки
Есть код //g++ 5.4.0 #include &lt;iostream&gt; struct foo { foo(int){std::cout &lt;&lt; &quot;int ctor&quot; &lt;&lt; std::endl;} foo()...

Передача обьекта
Ребят подскажите как передать обьект со всеми его свойствами в функцию повершел. допустим есть обьект PS C:\Users\user&gt;...

Передача обьекта в функию
Изучаю прогу в универе, понадобилось сделать обьект как аргумент функции.ООП ещё не изучали.Как это сделать можно?Я чисто интуитивно...

Передача пользовательского обьекта
есть WCF сервис public class SendEmailService : ISendEmailService { public void Send(EmailMessage email) { ...

Передача обьекта в атрибут
Встала такаЯ проблема. Есть обьект function robot(name) { this.name=name } var kreg=new robot(&quot;kreg&quot;) Его нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru