2012-01-27 3 views
1

Можно ли загрузить собственную (C++) DLL в качестве исполняемого файла? предпочтительнее прямо из памяти, не создавая EXE на жестком диске или что-то подобное?Запуск DLL в качестве exe

+0

Зачем вам это нужно? – rerun

+0

Что вы пытаетесь достичь здесь? – ChrisF

+0

Я пишу отладчик в C++, который может отлаживать только его собственный вид. x64 может отлаживать только x64 и x86 - только x86. Вместо того, чтобы предоставлять 2 отдельных exe, по одному для каждого platfrom, я думал проверить, какая версия нужна для debuggee, а затем «создать» ее обработку exe. – Idov

ответ

2

Поиск rundll32.exe. Но вам лучше знать, что вы делаете. Я не уверен, честно.

0

Вы можете использовать вызов WinAPI LoadLibrary для загрузки DLL.

3

Что конкретно это означало бы? Например, какую точку входа он использовал бы в DLL?

Единственный способ, с помощью которого это могло бы работать, было бы, если бы DLL была специально написана для его разрешения. И если это так, то не совсем понятно, почему вы не просто создавали исполняемый файл вместо DLL.

Дело в том, что заглушка RunDLL32.exe. Он предназначен для выполнения функции из DLL with a specific signature в качестве точки входа. Если DLL не была специально разработана для соответствия этой сигнатуре, то things don't go well. Если вам нужна функция , вам может потребоваться сопоставить подпись функции, требуемую RunDLL32.exe, и использовать ее для «выполнения» вашей DLL.

+0

Я пишу эту DLL, поэтому она будет написана, чтобы это разрешить. Мне нужно обрабатывать как платформы x64, так и x86, но я не хочу предоставлять 2 версии (что я делаю - объяснил в комментарии к моему вопросу) :) – Idov

+0

@Idov: Стандартный шаблон состоит из двух версий. Если это отладчик, он написан для разработчиков. Я думаю, им удастся понять разницу между платформами x86 и x64 и успешно манипулировать двумя разными исполняемыми файлами. Вы делаете это более сложным, чем нужно. –

4

Microsoft предоставляет Rundll32.exe, который может использоваться для выполнения функций DLL, которые были явно закодированы для поддержки этого использования.

Смежные вопросы