Member 10019512 Ответов: 2

Невозможно загрузить msvcr90.dll из локального пути


Я пытаюсь создать образец Win32 Exe приложения, в котором я загружаю msvcr90.dll от C:\ProgramFiles (x86)\ папка. Но это ошибка метания. Моя цель состоит в том, чтобы загрузить msvcr90.dll из пути приложения вместо C:\Windows\WinSxS папка. Но не в состоянии сделать так.

Что я уже пробовал:

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;

    // Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_DEMO_LOAD_EXE, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    DWORD dwError = 0;
    SetLastError(dwError);
    LoadLibrary(L"C:\\Program Files (x86)\\<myapp>\\<myapp1>\\msvcr90.dll");
    dwError = GetLastError();


    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_DEMO_LOAD_EXE));

    // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}

2 Ответов

Рейтинг:
1

CPallini

Цитата:
Ошибка при вызове LoadLibrary(L"в файлы C:\\Program (х86)\\&ЛТ;приложение&ГТ;\\&ЛТ;myapp1 в&ГТ;\\msvcr90.dll");
dwError = GetLastError();
Вы предоставляете неверный путь ('<' и '>' не допускаются в пути).
Вы явно игнорируете GetLastError значение.


Member 10019512

CPallini, здесь< > имеет в виду путь моего приложения.<myapp > и<myapp1 & gt; не являются фактическими значениями, А только значениями интерпретации. Я скопировал путь dll, как он есть, из этого места.
Кроме того, в GetLastError я получаю значение ошибки 126, что означает, что модуль не найден.

Рейтинг:
0

Jochen Arndt

Это помогло бы узнать код ошибки и сообщение.

Но я предполагаю, что он терпит неудачу, потому что он уже был загружен из другого места (системная папка).

Если вы действительно хотите поместить библиотеку DLL времени выполнения в папку приложения это может помочь:
Как сказать приложения файл манифеста, чтобы использовать dll файлы в текущей директории ?[^].
Тогда также нет необходимости загружать DLL вручную.

Но обычно для этого нет никаких причин. Лучшей альтернативой было бы статическое связывание среды выполнения (свойства проекта, C / C++, генерация кода, библиотека времени выполнения: /MT и /MTd для отладочных сборок).