LoadLibrary () um EXE?

Eu tenho um executável (que eu criei usando o Visual C ++ 10), e eu preciso usar seus recursos de outro programa que escrevi (mesmo ambiente). Devido aos requisitos complexos de implantação, os quais não entro, criar uma DLL a partir da funcionalidade necessária e carregá-la em ambos os programas não é algo que eu possa fazer.

Então eu pensei que eu posso__declspec(dllexport) algumas funções no EXE e, em seguida,LoadLibrary() vai me deixarGetProcAddress() eles.

Obviamente isso não pode ser feito, embora quando comecei a olhar para ele - parecia viável.

Especificamente, quando você__declspec(dllexport) funções em um projeto EXE, Visual C ++ também gera umlib arquivo para vinculação dinâmica - para que você nem precise usarLoadLibrary() - apenas ligue-se ao lib resultante e chame as funções.

Infelizmente, o principal problema é que quando você declara o arquivo resultante como um EXE, o Visual C ++ adiciona o ponto de entrada "CRTmain" no arquivo resultante, em vez do "CRTDLLmain" que obtém uma DLL. Quando o Windows (automaticamente)LoadLibrary() o EXE do seu programa principal, ele não chama o ponto de entrada "CRTDLLmain" (porque ele não existe), o tempo de execução C para o módulo não é inicializado e, como resultado, todo o trabalho interessante (como alocação de memória) falha com exceções de tempo de execução interessantes (*).

Portanto, a minha pergunta é: existe uma maneira de fazer com que o Visual C ++ para construir o arquivo resultante tanto o ponto de entrada "CRTmain"e o ponto de entrada "CRTDLLmain"?

(*) "Interessante" como em uma antiga maldição chinesa.

questionAnswers(3)

yourAnswerToTheQuestion