Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ C# dll и Qt

Автор: MJIbIu 2.7.2010, 14:29

По работе пришел новый приборчик к нему две .dll написано на Java и C#.
все бы ничего тока вот наш проект написан на Qt.
Возник вопрос как прикрутить dll к проекту написанному на Qt.
гуглил ничего толком не нашел

Автор: Litkevich Yuriy 2.7.2010, 16:25

Цитата(MJIbIu @ 2.7.2010, 18:29) *
Возник вопрос как прикрутить dll к проекту написанному на Qt.
также как и прикручиваются другие dll. только не забыть таскать со своим проектом среды выполнения для Сишарп и Явы (.Net Framework и JRE, соответсвенно)

Автор: DIMEDROLL 6.7.2010, 8:06

ищи по ключевому слову dllimport

Автор: MoPDoBoPoT 6.7.2010, 11:21

Вот ссылка в помощь: http:////http://www.progz.ru/forum/index.php?showforum=89

Автор: MJIbIu 7.7.2010, 10:17

Цитата(Litkevich Yuriy @ 2.7.2010, 17:25) *
Цитата(MJIbIu @ 2.7.2010, 18:29) *
Возник вопрос как прикрутить dll к проекту написанному на Qt.
также как и прикручиваются другие dll. только не забыть таскать со своим проектом среды выполнения для Сишарп и Явы (.Net Framework и JRE, соответсвенно)


CODE
QLibrary lib("D:\\MyPro\\MercuryAPI.dll");
if(!lib.load())
{
qDebug() << "\n Library is not loaded \n";
return false;
}
else
qDebug() << "\n Library is loaded \n";

все пучком подключается. Дальше я так понял надо делать lib.resolve() а как я не знаю. http://forum.sources.ru/index.php?showtopic=150368&hl= - мне не совсем подходит т.к. dll написано на C#. Переписывать ее в С++ себе дороже хоть и есть исходники.

Написание и использование DLL в различных средах - интересно но опять рядом но не то

Автор: Litkevich Yuriy 7.7.2010, 11:57

как я понимаю в dll'ках всё должно быть одинаково, имена функций и т.п.
открой эту dll'ку в Dependency Wallker, посмотри как там выглядят имена

Автор: DIMEDROLL 7.7.2010, 12:08

MJIbIu,
http://forum.codenet.ru/showthread.php?t=47913 говорится:

Цитата
Давайте все таки определимся, чего вы хотите?
Импортировать библиотеку native-кода, написанную на C, или создать собственную библиотеку на C#, чтобы использовать ее функционал в unmanaged-коде?
Первое называется PInvoke и элементарно реализуется, второе - невозможно без инициирования CLR в unmanaged-процессе, исключение лишь составляют COM-объекты (для них ОС сама разворачивает CLR).

тоесть это невозможно
upd: разве что использовать COM

еще набрел на http://blog.undsoft.com/programming/export-managed-to-unmanaged/
но тут автор скорее всего перепутал С++ с С++ CLI(или как там его, тот что managed C++), еще почитаю статью...
upd: дочитал, автор утверждает что это unmanaged С++(Blitz в оригинальной статье)
по идее должно работать
попробуй сделать как там написано и отпишись получилось ли
исходный код лучше брать с англ. варианта статьи

Автор: MJIbIu 7.7.2010, 13:52

Цитата(Litkevich Yuriy @ 7.7.2010, 12:57) *
как я понимаю в dll'ках всё должно быть одинаково, имена функций и т.п.
открой эту dll'ку в Dependency Wallker, посмотри как там выглядят имена

что то странное :blink:
нету ни экспортируемых и импортируемых функций

 

Автор: Litkevich Yuriy 7.7.2010, 14:15

никогда с таким не сталкивался

Автор: MJIbIu 7.7.2010, 14:20

Цитата(DIMEDROLL @ 7.7.2010, 13:08) *
еще набрел на http://blog.undsoft.com/programming/export-managed-to-unmanaged/

тоже читал отверг его с начало теперь по возился с ним разобрал в IL изменил а собрать обратно не смог =)

Автор: DIMEDROLL 7.7.2010, 14:30

Цитата(MJIbIu @ 7.7.2010, 14:20) *
что то странное :blink:
нету ни экспортируемых и импортируемых функций

тоже читал отверг его с начало теперь по возился с ним разобрал в IL изменил а собрать обратно не смог =)

да нет тут ничего странного, C# создает не обычные DLL, а те которые можно использовать из управляемого(managed) кода... погуглив, быстро найдешь

у тебя две дороги, либо разобраться как IL компилить либо разобраться как делать через COM обьекты, причем второе - более правильно

Автор: MJIbIu 8.7.2010, 15:16

Почесал репу дед и сказал не майтесь ребята
Мб как то и можно прикрутить C# dll к Qt но времени и усилий того не стоит.
Решили просто использовать mono. У нас проект и так клиент - сервер так, что еще один клиент будет где то висеть и гнать данные и пущай что он не на Qt

Автор: Гость 17.10.2010, 21:52

Скорми скомпиленную дллку рефлектору ...и сохрани как с++ код.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)