Я строю DLL следующим:Предупреждение разрешения Func путем ссылки на Func @ ##
extern "C" __declspec(dllexport) void __stdcall DrawMouse(int X, int Y, int R, int G, int B)
{
Buffer.SetMouse(X, Y, R, G, B);
}
Затем в .def файл я добавил:
LIBRARY Test
;DESCRIPTION "Test Definition File"
EXPORTS
DrawMouse;
Тогда, когда я компиляции, добавить опции компоновщика:
-static
-static-libstdc++
-static-libgcc
-Wl,--kill-at -d --input-def src\Test.def
-m32
и вывод:
Внимание: Решение _DrawMouse путем ссылки на _DrawMouse @ 24
Почему? Почему это предупреждает меня о разрешении и как я могу избавиться от него? Для большого объема экспорта, я получаю большое количество предупреждения ..
Небольшого примера:
main.cpp:
#include <windows.h>
class Input
{
public:
void SetMouse(int X, int Y, int R, int G, int B)
{
/**Dummy Example**/
}
};
Input Buffer;
extern "C" void __stdcall SetMouse2(int X, int Y, int R, int G, int B)
{
/**Dummy Non-Class Example**/
}
extern "C" __declspec(dllexport) void __stdcall DrawMouse(int X, int Y, int R, int G, int B)
{
Buffer.SetMouse(X, Y, R, G, B);
}
extern "C" __declspec(dllexport) void __stdcall DrawMouse2(int X, int Y, int R, int G, int B)
{
SetMouse2(X, Y, R, G, B);
}
extern "C" __declspec(dllexport) bool __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
DrawMouse(100, 100, 1, 1, 1);
DrawMouse2(100, 100, 1, 1, 1);
break;
case DLL_PROCESS_DETACH:
break;
}
return true;
}
Test.def:
LIBRARY Test
;DESCRIPTION "Test Definition File"
EXPORTS
DrawMouse;
DrawMouse2;
Компилятор:
-------------- Clean: Release in Test (compiler: GNU GCC Compiler)---------------
Cleaned "Test - Release"
-------------- Build: Release in Test (compiler: GNU GCC Compiler)---------------
x86_64-w64-mingw32-g++.exe -O2 -Wall -m32 -DBUILD_DLL -std=c++11 -c C:\Users\Brandon\Desktop\Test\main.cpp -o obj\Release\main.o
x86_64-w64-mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll obj\Release\main.o -o bin\Release\Test.dll -s -static -static-libstdc++ -static-libgcc -Wl,--kill-at -d --input-def Test.def -m32 -luser32
Warning: resolving _DrawMouse by linking to [email protected]
Warning: resolving _DrawMouse2 by linking to [email protected]
Use --enable-stdcall-fixup to disable these warnings
Use --disable-stdcall-fixup to disable these fixups
Output size is 32.50 KB
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 2 warnings (0 minutes, 0 seconds)
ПРИМЕЧАНИЕ: --disable-stdcall-fixup НЕ работает. Вот почему я спрашиваю, как исправить это и избавиться от этих предупреждений, а также от того, что их вызывает.
EDIT:
Командная строка с fixups по запросу:
x86_64-w64-mingw32-g++.exe -O2 -Wall -m32 -DBUILD_DLL -std=c++11 -c C:\Users\Brandon\Desktop\Test\main.cpp -o obj\Release\main.o
x86_64-w64-mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll obj\Release\main.o -o bin\Release\Test.dll -s -static -static-libstdc++ -static-libgcc -Wl,--kill-at -d --input-def Test.def -m32 --disable-stdcall-fixup -luser32
Также пробовал:
x86_64-w64-mingw32-g++.exe -O2 -Wall -m32 -DBUILD_DLL -std=c++11 -c C:\Users\Brandon\Desktop\Test\main.cpp -o obj\Release\main.o
x86_64-w64-mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll obj\Release\main.o -o bin\Release\Test.dll -s -static -static-libstdc++ -static-libgcc -Wl,--kill-at -d --input-def Test.def -m32 --enable-stdcall-fixup -luser32
Ни работы.
Как выглядит ваш исходный код, который вызывает DrawMouse? –
В частности, заголовочный файл, который объявляет его ... –
Спасибо, что нашли время ответить. Я обновил сообщение с примером примера, а также с журналом компилятора с командами. – Brandon