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» точка входа?
(*) "Интересно" как в старом китайском проклятии.