Запуск C ++ DLL с rundll32 — отсутствует запись

Поэтому я пытаюсь использовать rundll для тестирования и запуска своей написанной на C ++ DLL, и я следовал рекомендациям здесь и на других сайтах, и точка входа выглядит следующим образом:

__declspec(dllexport)  void CALLBACK entry(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
{
//do stuff
}

Но процесс rundll запрашивает у меня сообщение об ошибке «Ошибка в C: \ path \ to \ DLL Отсутствует запись: запись»

Попытка выполнения команды: «rundll32 C: \ path \ to \ DLL, entry».

2

Решение

Вы можете перепроверить, запустив Dumpbin.exe / exports в вашей DLL, чтобы увидеть фактическое экспортированное имя. Который сейчас не entry, как сообщение об ошибке говорит вам.

Вы должны префикс extern "C" к объявлению, чтобы отключить искажение имени C ++.

Достаточно хорош для 64-битного исполняемого файла, но это превращает его в _entry@16 если это 32-битная DLL, она все еще не достаточно хороша, чтобы поддерживать rundll32. Используйте Project + Add New Item, узел Code, выберите шаблон элемента «Файл определения модуля (.def)». И сделать так, чтобы это выглядело так:

EXPORTS
entry = entry
7

Другие решения


По вопросам рекламы [email protected]