Совершенно неожиданно пришлось писать на MFC, которая уже порядком позабыта... да и изменений в библиотеке за последние три года наверное произошло немало...
Господа, кто-нибудь сталкивался с ошибкой 1814 (The specified resource name cannot be found in the image file.) при вызове функции LoadToolBar?
Ошибка возникает при вызове указанной функции из метода OnCreate, который принадлежит классу-наследнику от CMDIChildWnd. Пытаюсь использовать код приведенный в MSDN (CToolBar::CreateEx) с минимальными изменениями, а он никак не хочет работать.
Возможно ли что ошибка возникает из-за того что и класс, в котором создается ToolBar, и ресурс его (ToolBar) описывающий находятся в DLL? Идентификатор ресурса уникален и для DLL, что естественно, и для приложения вцелом.
Здравствуйте, woof, Вы писали:
W>Возможно ли что ошибка возникает из-за того что и класс, в котором создается ToolBar, и ресурс его (ToolBar) описывающий находятся в DLL? Идентификатор ресурса уникален и для DLL, что естественно, и для приложения вцелом.
Попробуйте перенести вызов собственно CToolBar.CreateEx внутрь ДЛЛ — в какой нибудь врап-метод. Там то он точно будет работать со своими ресурсами.
Здравствуйте, SexMachine, Вы писали:
SM>Попробуйте перенести вызов собственно CToolBar.CreateEx внутрь ДЛЛ — в какой нибудь врап-метод. Там то он точно будет работать со своими ресурсами.
Т.е. вынести создание тулбара из класса Frame, например, в App, и вызывать эту функцию из OnCreate? Я правильно понял суть идеи или имелось в виду что-то другое?
Здравствуйте, woof, Вы писали:
W>Т.е. вынести создание тулбара из класса Frame, например, в App, и вызывать эту функцию из OnCreate? Я правильно понял суть идеи или имелось в виду что-то другое?
Да, только вынести не в App, а внутрь ДЛЛ — добавить экспортируемую функцию вроде CreateMyToolBar( DWORD dwFlags,...);
Здравствуйте, SexMachine, Вы писали:
SM>Да, только вынести не в App, а внутрь ДЛЛ — добавить экспортируемую функцию вроде CreateMyToolBar( DWORD dwFlags,...);
Спасибо, так и хочется поскорее попробовать, но получится только вечером
Здравствуйте, SexMachine, Вы писали:
SM>Да, только вынести не в App, а внутрь ДЛЛ — добавить экспортируемую функцию вроде CreateMyToolBar( DWORD dwFlags,...);
К сожалению этот вариант не сработал, причем аналогичная ошбка происходит и в том случае если я пытаюсь вызвать LoadBitmap
Может быть есть еще какие-то предложения, по поводу того как можно побороть данную ошибку? Я уже кажется все варианты перебрал...
Нашлось решение и для этой проблемы , и возможно оно позволит кому-нибудь сохранить пару часов. К сожалению мне потребовалось гораздо больше времени...
При загрузке ресурсов находящихся в DLL обратите внимение на функцию AfxGetStaticModuleState();
By default, MFC uses the resource handle of the main application to load the resource template. If you have an exported function in a DLL, such as one that launches a dialog box in the DLL, this template is actually stored in the DLL module. You need to switch the module state for the correct handle to be used. You can do this by adding the following code to the beginning of the function: