AIMP Forum

AIMP for PC => Дополнения / Addons => Разработка / Development => Topic started by: DarkDrawKill on March 19, 2026, 09:41:28

Title: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 19, 2026, 09:41:28
У метода QueryInterface интерфейса IUnknownImpl не совпадает возвращаемый тип
Code: [Select]
../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
Code: [Select]
virtual long __cdecl QueryInterface(REFIID riid, LPVOID* ppvObject) = 0;
upd также для mingw64 нет определения _wtoll только wtoll
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 19, 2026, 12:44:11
а как определён LPVOID у вас? Не, я конечно поправлю, но просто LPVOID и есть void*, откуда тут разные типы?

П.С. GCC код собирает без проблем.
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 19, 2026, 13:06:37
а как определён LPVOID у вас? Не, я конечно поправлю, но просто LPVOID и есть void*, откуда тут разные типы?
LPVOID определён корректно (void*) проблема в возвращаемом типе:
В IUnknown::QueryInterface возвращаемый тип это long а в IUnknownImpl HRESULT = unsigned long

также для #include <cairo> пришлось установить libcairo2-dev
П.С. GCC код собирает без проблем.
GCC собирается без проблем а вот для WINAPI через mingw64 не собирается
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 19, 2026, 13:21:08
GCC собирается без проблем а вот для WINAPI через mingw64 не собирается

Стоп. Для WinAPI этот код вообще неприменим. Скорее всего mingw64 выставляет для Windows дефайн отличный от _WIN32, который у меня используется
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 19, 2026, 13:25:19
Скорее всего mingw64 выставляет для Windows дефайн отличный от _WIN32, который у меня используется
нет он устанавливает дефайн _WIN32 и идёт по условию в первую ветку но падает потому что не знает об _wtoll в #define _ctoll _wtoll (предлагает wtoll)
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 19, 2026, 15:09:16
Тогда откуда идёт референс на Cairo? Cairo только под Линукс.

define _ctoll _wtoll (предлагает wtoll)

Это я гляну.
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 19, 2026, 15:26:42
Тогда откуда идёт референс на Cairo? Cairo только под Линукс.
я через meson собираю плагин пустышку для линукс и виндовс
для линукса нужно устанавливать libcairo2-dev которому принадлежит /usr/include/cairo/cairo.h без него на линукс не скомпилируется
для виндовс cairo он не требует так как макро условие на проверку дефайна _WIN32 выполняется
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 19, 2026, 20:54:14
Теперь понятно.
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 20, 2026, 08:31:02
Вот
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 20, 2026, 09:09:44
Вот
ошибка с _ctoll прошла но появилась новая

Code: [Select]
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
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 20, 2026, 09:14:26
Блин, видимо придётся разворачивать себе mingw... что-то у них там совсем напутано в заголовках под винду...
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 20, 2026, 09:18:31
Блин, видимо придётся разворачивать себе mingw... что-то у них там совсем напутано в заголовках под винду...
удалось исправить
нужно было установить дефайн UNICODE
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 20, 2026, 09:42:34
нужно было установить дефайн UNICODE

Спасибо, буду иметь в виду.
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 20, 2026, 21:00:29
Так на линукс пустышка завелась и отображает нужные данные в панели плагинов
На виндовс он просто отображается my_plugin.dll а попытка его включить сопровождается ошибкой "Не найден указанный модуль" хотя пкм -> расположение файла... его видит в папке ???
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 20, 2026, 23:57:10
Не найден указанный модуль

скорее всего он тянет какие-то сишные dll-ки и не может загрузиться
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 21, 2026, 00:04:35
скорее всего он тянет какие-то сишные dll-ки и не может загрузиться
добавил функции возвращающей хедер __declspec(dllexport) ошибка пропала но плагин теперь вообще не грузится (в таком случае на линукс не скомпилируется придётся заботиться о экспорте самостоятельно)

гзв не просто произошёл баг с кешированием удалил упоминания плагина в AIMP.ini и он загрузился (таже ошибка)

гзв2 магия не иначе
есть включить просто плеер то плагин не загружается и выдаёт ошибку о не найденном модуле но есть открыть плеер с ключём -debug то после включения my_plugin.dll плеер его загружает без ошибок и обновляет кеш достав из него имя "The Plugin" и автора "Author"
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 21, 2026, 08:01:49
есть включить просто плеер то плагин не загружается и выдаёт ошибку о не найденном модуле но есть открыть плеер с ключём -debug то после включения my_plugin.dll плеер его загружает без ошибок и обновляет кеш достав из него имя "The Plugin" и автора "Author"
Скиньте DLL-ку посмотрю
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 21, 2026, 11:04:21
завернул её в зип
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 21, 2026, 15:52:25
Плагин цепляет "libstdc++-6.dll", если эта библиотека загрузится в память каким-нибудь другим плагином или системным модулем - ваш плагин загрузится.
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: DarkDrawKill on March 21, 2026, 16:28:56
Плагин цепляет "libstdc++-6.dll", если эта библиотека загрузится в память каким-нибудь другим плагином или системным модулем - ваш плагин загрузится.
спасибо большое
добавил флаги -static-libstdc++ и -static-libgcc линковщику и плагин успешно подхватился
только не понимаю почему через mingw64 на виндовс подобная ситуация не происходила

гзв опытным путём узнал что __declspec не обязателен если используется def файл
Title: Re: AIMP 6.00 SDK: Несовпадение типов
Post by: Artem on March 21, 2026, 20:50:32
только не понимаю почему через mingw64 на виндовс подобная ситуация не происходила

гзв опытным путём узнал что __declspec не обязателен если используется def файл

Тут я не отвечу, я студию использую для плюсов