Здравствуйте, 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;