Почему программа ругается?
От: lah  
Дата: 17.08.04 08:12
Оценка:
Здраствуйте.
Пишу с таким вопросом:
Запускаю окно диалога через функцию из dll. Окно отображается и тут же windows пишет что обнаружена ошибка. Почему? и что делать?

Код экспортируемой функции:
#include "test.h"
#include "Dlg.h"

extern "C" __declspec(dllexport) int TestFunc()  
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CDlg dlg; 
    AfxMessageBox("Этот вызов работает", MB_OK);
    dlg.DoModal();

    return TRUE;
}


код Dlg.h

#if !defined(AFX_DLG_H__B90B4971_C399_4AEE_8C62_86A63FCC9C0D__INCLUDED_)
#define AFX_DLG_H__B90B4971_C399_4AEE_8C62_86A63FCC9C0D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Dlg.h : header file
//
#include "resource.h"
#include "afxwin.h"
/////////////////////////////////////////////////////////////////////////////
// CDlg dialog

class CDlg : public CDialog
{
// Construction
public:
    CDlg(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
    //{{AFX_DATA(CDlg)
    enum { IDD = IDD_DLG };
        // NOTE: the ClassWizard will add data members here
    //}}AFX_DATA


// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:

    // Generated message map functions
    //{{AFX_MSG(CDlg)
    virtual void OnOK();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DLG_H__B90B4971_C399_4AEE_8C62_86A63FCC9C0D__INCLUDED_)



Код Dlg.cpp

#include "Dlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlg dialog


CDlg::CDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CDlg)
        // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
}

void CDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CDlg)
        // NOTE: the ClassWizard will add DDX and DDV calls here
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDlg, CDialog)
    //{{AFX_MSG_MAP(CDlg)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlg message handlers

void CDlg::OnOK() 
{
    // TODO: Add extra validation here
    AfxMessageBox("Работает");
    CDialog::OnOK();
}



код вызывающей программы:

#include "stdafx.h"
typedef void (WINAPI*cfunc)();

cfunc TestFunc;

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
     HINSTANCE hLib=LoadLibrary("MyDll.dll");
    TestFunc=(cfunc)GetProcAddress((HMODULE)hLib, "TestFunc");
    TestFunc();
    FreeLibrary((HMODULE)hLib);
    return 0;
}
Re: Почему программа ругается?
От: Othello  
Дата: 17.08.04 11:47
Оценка:
А какая ошибка хоть обнаружена то ?
... << RSDN@Home 1.1.4 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.