Название: Mingw Dll + MSVC. Возможно ли? Отправлено: Bepec от Август 14, 2016, 14:38 Собственно сабж в шапке.
Собрал динамическую Dll-ку, с нужным мне функционалом на mingw. Пока используется mingw для сборки программы, использующей её - всё гуд. Всё передаётся, принимается, работает. Попытался запихнуть в MSVC проект - функции резолвятся нормально, но при вызове функции с аргументами начинает материться на ESP регистр и неверное форматирование. PS всегда думал, что стандарт один, что динамикой можно пользоваться везде. Видимо еще тонкости есть. C длл работал мало, потому проше совета (параллельно качаю VS чтоб разбираться). PPS Dll собрана с использованием Qt, загрузчик - без него. В дллке Код: #ifdef TESTLIB_LIB В загрузчике Код: typedef void (__stdcall* type_registerCallback)(void (*)(void)); Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Bepec от Август 14, 2016, 15:45 Ммм... а чем тогда пользоваться, чтобы контейнеры передавать - своими самописными?
Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Igors от Август 14, 2016, 15:51 Сходу (на шару) попробуйте __cdecl вместо __stdcall
PS всегда думал, что стандарт один, что динамикой можно пользоваться везде. Видимо еще тонкости есть. Которых на "неубогом" Вындоуз значительно больше. Напр обмен std контейнерами между приложением и dll-кой рухнет, т.к. у MSVC своя свадьба, у mingw своя.Ммм... а чем тогда пользоваться, чтобы контейнеры передавать - своими самописными? Ну как-то так. То Вы у "самой дружественной" спрашивайте :)Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Bepec от Август 14, 2016, 17:14 Эт вопрос скорее к компиляторам а не ОС, увы.
Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Racheengel от Август 14, 2016, 20:41 В дллках можно юзать тока примитивные типа.
Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Bepec от Август 14, 2016, 20:42 Это как? Т.е. что-то сложнее int передавать нельзя?
Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Racheengel от Август 14, 2016, 21:58 Это как? Т.е. что-то сложнее int передавать нельзя? Это как? Т.е. что-то сложнее int передавать нельзя? Уточню: если дллка и хост используют зависимости, собранные разными компиляторами. Ну то есть можно и QString передавать, если обе части собраны одной и той же студией с одной и той же версией Qt. Иначе - обе части будут требовать разный рантайм, хотя имена параметров и будут идентичными. Результат - крэш (как в Вашей ситуации). Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Bepec от Август 15, 2016, 11:25 Ммм... ну смотрите - у меня есть нужда передать список структур простых типов.
std::list <myStruct> - можно ли это реализовать, чтобы потом разные компиляторы нормально воспринимали её? PS Ну вон виндовские дллки же вполне нормально свои типы передают и для mingw и для msvc. Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: kuzulis от Август 15, 2016, 11:29 Цитировать Ну вон виндовские дллки же вполне нормально свои типы передают и для mingw и для msvc. Эмм.. ну там же обычно простые POD типы, а не всякие там классы. Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Igors от Август 15, 2016, 11:45 Ммм... ну смотрите - у меня есть нужда передать список структур простых типов. Вряд ли. Переводите в POD, напр передавайте число эл-тов вектора и адрес первого. Ну и, как Вы знаете, std MSVC несовместимы по Debug/Release (шедевр MS) std::list <myStruct> - можно ли это реализовать, чтобы потом разные компиляторы нормально воспринимали её? PS Ну вон виндовские дллки же вполне нормально свои типы передают и для mingw и для msvc. А там нет std, одно WinAPIНазвание: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Bepec от Август 15, 2016, 12:14 Igors не могли бы вы дать пример как передавать вектор...
Ведь стдшный я как понимаю не подходит, а сам я его реализовывал... эмм.. лет 10 назад :D PS мало работал с простыми типами. Или вы имеете в виду обычный массив, аля myStruct[N], с указанием N отдельным аргументом? Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Igors от Август 15, 2016, 12:45 Напр так
Код Ну а в dll описать как Код
Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Bepec от Август 15, 2016, 12:52 Хм.
А структуры так возвращать можно? Возврат данных из дллки в каллбек функции, получается вот так? Код: void someCallBack(myStruct * data, int num); Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Igors от Август 15, 2016, 13:31 Хм. myStruct должна быть известна dll'ке, не содержать std членов, и я бы еще выравнивание воткнул (#pragma pack). Короче - в "С стиле" все будет работать железно, в С++ хз, обычно нет А структуры так возвращать можно? Возврат данных из дллки в каллбек функции, получается вот так? Код: void someCallBack(myStruct * data, int num); Название: Re: Mingw Dll + MSVC. Возможно ли? Отправлено: Bepec от Август 15, 2016, 14:31 Ну это известно должно быть обоим сторонам.
PS Жаль конечно что разные компиляторы не поддерживают. Отож на одном компиляторе и QWidget достать можно спокойно, не то что std. |