Как загрузить ресурс из EXE, а не DLL - PullRequest
0 голосов
/ 23 февраля 2012

Я загружаю спутниковую DLL, которая содержит языковые ресурсы. Однако я хочу хранить только строки в DLL, а не ресурсы диалога. Я загружаю DLL, как показано ниже:

hInst = LoadLibrary( _T("MyAppFRA.dll") );
if (hInst!= NULL)
    AfxSetResourceHandle( hInst );

Проблема в том, что если я сейчас принесу CTestDlg, как показано ниже, он никогда не появится.

CTestDlg dlg;
dlg.DoModal()

Это потому, что ресурс диалога IDD_DIALOG1 находится в exe, но не в dll, поэтому DoModal () не может его найти (в результате вызова AfxSetResourceHandle()). Это намеренно, я подумал, если это ресурс не найден в dll, он будет автоматически выглядеть в exe, но это не так.

Могу ли я загрузить диалог из exe-ресурса, когда остальные мои ресурсы находятся в dll?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2012

Вы можете загрузить шаблон диалога из ресурсов .exe самостоятельно, затем вызвать InitModalIndirect, чтобы связать его с объектом диалога. DoModal будет использовать этот ресурс, а не пытаться загрузить его из текущего дескриптора ресурса.

0 голосов
/ 24 февраля 2012

У нас огромное приложение с ресурсами повсюду.Вы можете использовать AfxSetResourceHandle () всякий раз, когда хотите изменить контекст, в котором MFC ищет ресурсы.У нас есть стековый объект, который позволяет нам установить дескриптор ресурса и затем восстановить его.AfxGetResourceHandle () - это функция, которая получает текущее значение.

...