急在使用MFC扩展的DLL中出现的有关问题,望迷津
急急!!!,在使用MFC扩展的DLL中出现的问题,望高手指点迷津
小弟,在进行MFC扩展Dll中存在的问题,具体的步骤是这样的:
1、使用AppWizard创建了个MFC扩展的DLL工程,名字随便起个工程名ExtDllDemo,
2、向工程中添加了一个对话框资源IDD_INPUT,其次在上面绘制了,一个Static控件IDC_PROMPT,和一个Edit控件IDC_EDIT,
3、用ClassWizard为对话框IDD_INPUT创建了一个新的对话框类CInputDlg ,该类是直接从CDialog派生,我在这个类的声明中加入关键字 _declspec(dllexport)
就是这样:class _decpspec(dllexport) CInputDlg: public CDialgo
{
....类体....
//我加的变量和函数
public:
CString m_strTitle;
CString m_strPrompt;
CString m_strInput; //只有这个变量和刚刚的控件关联,和IDC_EDIT
public:
CString GetInput(CString Title, CString Prompt);
}
//GetInput()函数体
CString CInputDlg::GetInput(CString Title, CString Prompt)
{
CString str( " ");
m_strTitle = Title;
m_strPrompt = Prompt;
if ( Domodal() == IDOK)
{
str = m_strInput;
}
return str;
}
//修改了,OnInitDialog 函数
BOOL CInputDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowText(m_strTitle);
GetDlgItem(IDC_PROMPT)-> SetWindowText(m_strPrompt);
GetDlgItem(IDC_EDIT)-> SetFoucus();
return FALSE;
}
//上面这个简单的MFC拓展DLL的目的, 就是为了实现向Visul basic 中的InputBox的功能,功能很简单,主要在于明白Dll使用过程,编译,我生成了dLL文件,之后我又新建了一个MFC的对话框的程序用测试
比如说,我新建的MFC的对话框的程序名称为:ExtDllTest,我将刚刚在工程中生成的ExtDllDemo.dll拷贝到ExtDllTest所在的目录中下,同时我在ExtDllTest程序中作了如下的修改:
1、在实现文件CExtDllTestDlg.cpp的最前面,加入如下的声明语句:
///CInputDlg dialog
class _declspec(dllimport) CInput: public CDialog
{
public:
CString GetInput(CString Title, CString Prompt);
CInputDlg(CWnd* pParent = NULL);
};
//上面的这段代码是在测试工程中定义了类CInputDlg,以便于在以后的代码中使用该类,我只是给出了声明,因为函数的实现是在ExtDllDemo.dll中实现的
2、我修改测试工程ExDllTest的CExtDllTestDlg的OnInitDialog的中的内容:具体就是在//TODO的注释下面加上下面几句用于测试刚刚生成的ExtdllDemo.dll,如下:
// TODO: Add extra initialization here
CInputDlg dlg;
CString str = dlg.GetInput( "输入 ", "请输入对话框的标题 ");
SetWindow(str);
//以上就是我加上的,但是我在执行的时候却出现了,问题,
出现了错误:Uanbled exception in ExtDllTest.exe(MFC42.DLL): 0xc0000005: Acess Violation.
程序终止到下面这个函数中我标有//********注释的地方:
void CWnd::SetWindowText(LPCTSTR lpszString)
{
ASSERT(::IsWindow(m_hWnd));
if (m_pCtrlSite == NULL)
小弟,在进行MFC扩展Dll中存在的问题,具体的步骤是这样的:
1、使用AppWizard创建了个MFC扩展的DLL工程,名字随便起个工程名ExtDllDemo,
2、向工程中添加了一个对话框资源IDD_INPUT,其次在上面绘制了,一个Static控件IDC_PROMPT,和一个Edit控件IDC_EDIT,
3、用ClassWizard为对话框IDD_INPUT创建了一个新的对话框类CInputDlg ,该类是直接从CDialog派生,我在这个类的声明中加入关键字 _declspec(dllexport)
就是这样:class _decpspec(dllexport) CInputDlg: public CDialgo
{
....类体....
//我加的变量和函数
public:
CString m_strTitle;
CString m_strPrompt;
CString m_strInput; //只有这个变量和刚刚的控件关联,和IDC_EDIT
public:
CString GetInput(CString Title, CString Prompt);
}
//GetInput()函数体
CString CInputDlg::GetInput(CString Title, CString Prompt)
{
CString str( " ");
m_strTitle = Title;
m_strPrompt = Prompt;
if ( Domodal() == IDOK)
{
str = m_strInput;
}
return str;
}
//修改了,OnInitDialog 函数
BOOL CInputDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowText(m_strTitle);
GetDlgItem(IDC_PROMPT)-> SetWindowText(m_strPrompt);
GetDlgItem(IDC_EDIT)-> SetFoucus();
return FALSE;
}
//上面这个简单的MFC拓展DLL的目的, 就是为了实现向Visul basic 中的InputBox的功能,功能很简单,主要在于明白Dll使用过程,编译,我生成了dLL文件,之后我又新建了一个MFC的对话框的程序用测试
比如说,我新建的MFC的对话框的程序名称为:ExtDllTest,我将刚刚在工程中生成的ExtDllDemo.dll拷贝到ExtDllTest所在的目录中下,同时我在ExtDllTest程序中作了如下的修改:
1、在实现文件CExtDllTestDlg.cpp的最前面,加入如下的声明语句:
///CInputDlg dialog
class _declspec(dllimport) CInput: public CDialog
{
public:
CString GetInput(CString Title, CString Prompt);
CInputDlg(CWnd* pParent = NULL);
};
//上面的这段代码是在测试工程中定义了类CInputDlg,以便于在以后的代码中使用该类,我只是给出了声明,因为函数的实现是在ExtDllDemo.dll中实现的
2、我修改测试工程ExDllTest的CExtDllTestDlg的OnInitDialog的中的内容:具体就是在//TODO的注释下面加上下面几句用于测试刚刚生成的ExtdllDemo.dll,如下:
// TODO: Add extra initialization here
CInputDlg dlg;
CString str = dlg.GetInput( "输入 ", "请输入对话框的标题 ");
SetWindow(str);
//以上就是我加上的,但是我在执行的时候却出现了,问题,
出现了错误:Uanbled exception in ExtDllTest.exe(MFC42.DLL): 0xc0000005: Acess Violation.
程序终止到下面这个函数中我标有//********注释的地方:
void CWnd::SetWindowText(LPCTSTR lpszString)
{
ASSERT(::IsWindow(m_hWnd));
if (m_pCtrlSite == NULL)