Выглядит круто, добавлен в мой список «для чтения». Спасибо!

х пор у меня был своего рода механизм плагинов, в котором я загружал dll, используя LoadLibrary и GetProcAddress, чтобы создать конкретный объект и вернуть общий интерфейс. Это работало нормально, пока я не решил, что один из dll должен быть exe.

Документация LoadLibrary говорит, что это может быть использовано и для exe, поэтому я дал ему шанс. Exe загружается без ошибок, как GetProcAddress. Но когда я пытаюсь вызвать конструктор моего конкретного объекта, я получаю нарушение прав доступа.

Я думал, что это произойдет, потому что загрузка исполняемого файла не загружает все библиотеки DLL, которые он использует. Поэтому я попытался загрузить их с помощью LoadLibrary, но я получил ту же ошибку. Любой совет по этому поводу?

Вот мой код (смешанный C ++ / CLI):

Interface* MCFactory::LoadInstanceFromAssembly( String ^ concreteAssemblyName, String ^ param ){
    string fullPathToAssembly = "";
    fullPathToAssembly += FileSystem::GetPathToProgramDirectory();
    fullPathToAssembly += "\\" + marshal_as<string>(concreteAssemblyName);

    MODULE hDLL = AssemblyLoader::GetInstance().LoadAssembly( fullPathToAssembly ); 

    Interface* pObject = NULL;
    if (hDLL != NULL){
        t_pCreateInstanceFunction pCreateInstanceFunction =
            (t_pCreateInstanceFunction) ::GetProcAddress (hDLL, CREATE_INSTANCE_FUNCTION_NAME.c_str());

        if ( pCreateInstanceFunction != NULL ){
            //Yes, this assembly exposes the function we need
            //Invoke the function to create the object
            pObject = (*pCreateInstanceFunction)( marshal_as<string>(param) );              
        }
    }           
    return pObject;
}

(AssemblyLoader :: GetInstance (). LoadAssembly - это просто оболочка для :: LoadLibrary)

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

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