Поэтому я пытаюсь использовать 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».
Вы можете перепроверить, запустив Dumpbin.exe / exports в вашей DLL, чтобы увидеть фактическое экспортированное имя. Который сейчас не entry
, как сообщение об ошибке говорит вам.
Вы должны префикс extern "C"
к объявлению, чтобы отключить искажение имени C ++.
Достаточно хорош для 64-битного исполняемого файла, но это превращает его в _entry@16
если это 32-битная DLL, она все еще не достаточно хороша, чтобы поддерживать rundll32. Используйте Project + Add New Item, узел Code, выберите шаблон элемента «Файл определения модуля (.def)». И сделать так, чтобы это выглядело так:
EXPORTS
entry = entry