Re: Проблема с вызовом ресурса из библиотеки
От: J-son  
Дата: 28.06.11 09:37
Оценка:
Здравствуйте, J-son, Вы писали:

JS>Наверно боян, но что то я уже второй день не могу разобраться с этой проблемой. Работаю с библиотеками недавно


JS>В обычной DLL, созданной с поддержкой mfc, создал форму в ресурсах. А из функции не могу эту форму вызвать.



JS>
JS>class CComputerParams : public CDialog
JS>{
JS>public:
JS>    CComputerParams(CWnd* pParent = NULL);

JS>    enum { IDD = IDD_COMP_PARAMS_DIALOG };

JS>    protected:
JS>    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
JS>.......................................................................
JS>}

JS>..........................................................................
JS>extern "C"
JS>{
JS>   __declspec(dllexport) void MyFunction()
JS>   {
JS>       //AFX_MANAGE_STATE(AfxGetStaticModuleState()); // Прочитал, что вроде бы это должно помочь, но толку нет
       
JS>       CComputerParams cmp;
JS>       int res = cmp.DoModal();// возврашает -1
JS>    res = cmp.Create(IDD_COMP_PARAMS_DIALOG, NULL);// а так вываливается на Asserte
JS>   }
JS>}

JS>



Я более менее разобрался, надо вызвать AfxGetResourceHandle().



HINSTANCE hOld = AfxGetResourceHandle();
AfxSetResourceHandle(theApp.m_hInstance);
CComputerParams cmp;
int res = cmp.DoModal();
AfxSetResourceHandle(hOld);


Но все равно не работает.
Смотрю код функции DoModal


hInst = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
HRSRC hResource = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
hDialogTemplate = LoadResource(hInst, hResource);


В случае с AfxSetResourceHandle и в случае, когда оно закоментировано, hInst одно и то же (но не 0).
В итоге hResource = 0;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.