AIMP Forum
AIMP for PC => Дополнения / Addons => Разработка / Development => Topic started by: DarkDrawKill on March 19, 2026, 09:41:28
-
У метода QueryInterface интерфейса IUnknownImpl не совпадает возвращаемый тип
../src/../aimp_sdk/IUnknownImpl.h:21:28: error: conflicting return type specified for ‘HRESULT IUnknownImpl<T>::QueryInterface(const GUID&, void**) [with T = IAIMPPlugin; HRESULT = long unsigned int; LPVOID = void*]’
21 | virtual HRESULT WINAPI QueryInterface(REFIID riid, LPVOID* ppvObj)
Метод у IUnknown
virtual long __cdecl QueryInterface(REFIID riid, LPVOID* ppvObject) = 0;
upd также для mingw64 нет определения _wtoll только wtoll
-
а как определён LPVOID у вас? Не, я конечно поправлю, но просто LPVOID и есть void*, откуда тут разные типы?
П.С. GCC код собирает без проблем.
-
а как определён LPVOID у вас? Не, я конечно поправлю, но просто LPVOID и есть void*, откуда тут разные типы?
LPVOID определён корректно (void*) проблема в возвращаемом типе:
В IUnknown::QueryInterface возвращаемый тип это long а в IUnknownImpl HRESULT = unsigned long
также для #include <cairo> пришлось установить libcairo2-dev
П.С. GCC код собирает без проблем.
GCC собирается без проблем а вот для WINAPI через mingw64 не собирается
-
GCC собирается без проблем а вот для WINAPI через mingw64 не собирается
Стоп. Для WinAPI этот код вообще неприменим. Скорее всего mingw64 выставляет для Windows дефайн отличный от _WIN32, который у меня используется
-
Скорее всего mingw64 выставляет для Windows дефайн отличный от _WIN32, который у меня используется
нет он устанавливает дефайн _WIN32 и идёт по условию в первую ветку но падает потому что не знает об _wtoll в #define _ctoll _wtoll (предлагает wtoll)
-
Тогда откуда идёт референс на Cairo? Cairo только под Линукс.
define _ctoll _wtoll (предлагает wtoll)
Это я гляну.
-
Тогда откуда идёт референс на Cairo? Cairo только под Линукс.
я через meson собираю плагин пустышку для линукс и виндовс
для линукса нужно устанавливать libcairo2-dev которому принадлежит /usr/include/cairo/cairo.h без него на линукс не скомпилируется
для виндовс cairo он не требует так как макро условие на проверку дефайна _WIN32 выполняется
-
Теперь понятно.
-
Вот
-
Вот
ошибка с _ctoll прошла но появилась новая
PChar WINAPI MyPlugin::InfoGet(int index)
{
if (index == AIMP_PLUGIN_INFO_NAME) {
return TEXT("The Plugin");
}
else if (index == AIMP_PLUGIN_INFO_AUTHOR) {
return TEXT("Author");
}
return nullptr;
}
возвращает ошибку error: cannot convert ‘const char*’ to ‘PChar’ {aka ‘wchar_t*’} in return
хотя если верить документации виндовс #define TEXT(x) L##x
-
Блин, видимо придётся разворачивать себе mingw... что-то у них там совсем напутано в заголовках под винду...
-
Блин, видимо придётся разворачивать себе mingw... что-то у них там совсем напутано в заголовках под винду...
удалось исправить
нужно было установить дефайн UNICODE
-
нужно было установить дефайн UNICODE
Спасибо, буду иметь в виду.
-
Так на линукс пустышка завелась и отображает нужные данные в панели плагинов
На виндовс он просто отображается my_plugin.dll а попытка его включить сопровождается ошибкой "Не найден указанный модуль" хотя пкм -> расположение файла... его видит в папке ???
-
Не найден указанный модуль
скорее всего он тянет какие-то сишные dll-ки и не может загрузиться
-
скорее всего он тянет какие-то сишные dll-ки и не может загрузиться
добавил функции возвращающей хедер __declspec(dllexport) ошибка пропала но плагин теперь вообще не грузится (в таком случае на линукс не скомпилируется придётся заботиться о экспорте самостоятельно)
гзв не просто произошёл баг с кешированием удалил упоминания плагина в AIMP.ini и он загрузился (таже ошибка)
гзв2 магия не иначе
есть включить просто плеер то плагин не загружается и выдаёт ошибку о не найденном модуле но есть открыть плеер с ключём -debug то после включения my_plugin.dll плеер его загружает без ошибок и обновляет кеш достав из него имя "The Plugin" и автора "Author"
-
есть включить просто плеер то плагин не загружается и выдаёт ошибку о не найденном модуле но есть открыть плеер с ключём -debug то после включения my_plugin.dll плеер его загружает без ошибок и обновляет кеш достав из него имя "The Plugin" и автора "Author"
Скиньте DLL-ку посмотрю
-
завернул её в зип
-
Плагин цепляет "libstdc++-6.dll", если эта библиотека загрузится в память каким-нибудь другим плагином или системным модулем - ваш плагин загрузится.
-
Плагин цепляет "libstdc++-6.dll", если эта библиотека загрузится в память каким-нибудь другим плагином или системным модулем - ваш плагин загрузится.
спасибо большое
добавил флаги -static-libstdc++ и -static-libgcc линковщику и плагин успешно подхватился
только не понимаю почему через mingw64 на виндовс подобная ситуация не происходила
гзв опытным путём узнал что __declspec не обязателен если используется def файл
-
только не понимаю почему через mingw64 на виндовс подобная ситуация не происходила
гзв опытным путём узнал что __declspec не обязателен если используется def файл
Тут я не отвечу, я студию использую для плюсов