Как передать строку в DLL с помощью Win32 API?
Я пытаюсь передать строку (или char*) из Rundll32 в DLL, собранную (с MinGW), используя этот источник:
#include <windows.h>
__declspec( dllexport ) int hello(LPSTR content) {
MessageBox( NULL, content, "Message", MB_OK );
return 0;
}
При запуске этого я получаю случайные сбои. Вот так я и запускаю.
C:\workspace>c:\MinGW\bin\gdb.exe rundll32 -ex "run program1.dll,hello test"
Я попытался установить точку останова в hello(), и кажется, что "контент" довольно случайный. Я неправильно передаю аргумент из rundll32?
Это работает нормально, если у меня нет аргументов.
1 ответ
Решение
Точки входа rundll32 должны быть объявлены очень специфическим способом. Проверьте эту статью, которая объясняет, что делать. Одна вещь, которую я заметил, заключается в том, что для символа, называемого "EntryPoint", имя функции, передаваемой в rundll32, должно быть "_EntryPoint@16" для 32-битных DLL и просто "EntryPoint" для 64-битных DLL.