Как передать строку в 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.

Другие вопросы по тегам