LoadLibrary () EXE?

У меня есть исполняемый файл (который я создал с помощью Visual C ++ 10), и мне нужно использовать его возможности из другой программы, которую я написал (в той же среде). Из-за сложных требований к развертыванию, которые я выигралЯ не могу создать библиотеку DLL из требуемой функциональности и загрузить ее в обе программы.

Вот я и подумал, что смогу__declspec(dllexport) некоторые функции в EXE, а затемLoadLibrary() позволит мнеGetProcAddress() их.

Очевидно, это можетЭто было сделано, хотя, когда я начал смотреть на это - это выглядело осуществимым.

В частности, когда вы__declspec(dllexport) функции в проекте EXE, Visual C ++ также генерируетlib файл для динамического связывания - так что вы неТ даже нужно использоватьLoadLibrary() - просто связать полученную библиотеку и вызвать функции.

К сожалению, основная проблема заключается в том, что когда вы объявляете полученный файл как EXE, Visual C ++ добавляет "CRTmain» точка входа в результирующий файл вместо "CRTDLLmain» что получает DLL. Когда Windows (автоматически)LoadLibrary() EXE из вашей основной программы, это неТ "CRTDLLmain» точка входа (потому что это неt существует), среда выполнения C для модуля неt инициализируется, и в результате вся интересная работа (например, выделение памяти) завершается с интересными (*) исключениями времени выполнения.

Итак, мой вопрос заключается в следующем: есть ли способ заставить Visual C ++ встроить в результирующий файл оба "CRTmain» точка входаа также "CRTDLLmain» точка входа?

(*) "Интересно" как в старом китайском проклятии.

Ответы на вопрос(3)

Ваш ответ на вопрос