Cześć,
Mam problem z interfejsem graficznym do mojego sterownika-DLL, w Windowsie. Sterownik został stworzony z pomocą kreatora, który do GUI używa MFC, z którego jestem prawie zielony. Próbowałem bazować na innym przykładzie i po paru próbach w końcu chciałem wrócić do stanu "z przed mojego grzebania" i niestety jest problem.
Dialog.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall CDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAE_NXZ)
moje pliki z tym związane to :
Dialog.h
#pragma once
class Dialog : public CDialog
{
DECLARE_DYNAMIC(Dialog)
// Dialog Data
private:
//{{AFX_DATA(CConfigDlg)
enum { IDD = IDD_DIALOG1 };
CString m_strIPAddress;
DWORD m_dwProviderID;
int m_Port;
//}}AFX_DATA
public:
Dialog(CWnd* pParent, DWORD dwPPID); // standard constructor
// Dialog(CWnd* pParent = NULL); // standard constructor
virtual ~Dialog();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
public:
afx_msg void OnBnClickedCancel();
//public:
// afx_msg bool OnInitDialog();
public:
afx_msg void OnIpnFieldchangedIpaddress1(NMHDR *pNMHDR, LRESULT *pResult);
public:
afx_msg void OnEnChangeEdit1();
public:
//afx_msg void OnChangeIpaddress(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnChangeIpaddress();
public:
afx_msg void OnOK();
};
Dialog.cpp
// Dialog.cpp : implementation file
//
//#include"windows.h"
#include "stdafx.h"
#include "SIPTSP.h"
#include "Dialog.h"
// Dialog dialog
IMPLEMENT_DYNAMIC(Dialog, CDialog)
Dialog::Dialog(CWnd* pParent,DWORD dwProviderID): CDialog(Dialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CConfigDlg)
m_strIPAddress = _T("");
m_dwProviderID = dwProviderID;
m_Port = 0;
//}}AFX_DATA_INIT
}
Dialog::~Dialog()
{
}
void Dialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_IPADDRESS1, m_strIPAddress);
DDX_Text(pDX, IDC_EDIT1, m_Port);
}
BEGIN_MESSAGE_MAP(Dialog, CDialog)
ON_BN_CLICKED(IDOK, &Dialog::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &Dialog::OnBnClickedCancel)
ON_EN_CHANGE(IDC_EDIT1, &Dialog::OnChangeIpaddress)
ON_EN_CHANGE(IDC_IPADDRESS1, &Dialog::OnChangeIpaddress)
ON_NOTIFY(IPN_FIELDCHANGED, IDC_IPADDRESS1, &Dialog::OnIpnFieldchangedIpaddress1)
END_MESSAGE_MAP()
// Dialog message handlers
void Dialog::OnBnClickedOk()
{
OnOK();
}
void Dialog::OnBnClickedCancel()
{
// TODO: Add your control notification handler code here
OnCancel();
}
void Dialog::OnEnChangeEdit1()
{
UpdateData(TRUE);
GetDlgItem(IDOK)->EnableWindow(m_strIPAddress.IsEmpty() == FALSE && m_Port > 0);
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
void Dialog::OnOK()
{
if (UpdateData(TRUE))
{
// Write the data out
GetSP()->WriteProfileString (m_dwProviderID, _T("IPServer"), m_strIPAddress);
GetSP()->WriteProfileDWord (m_dwProviderID, _T("Port"), m_Port);
// Dismiss the dialog.
CDialog::OnOK();
}
}
void Dialog::OnChangeIpaddress()
{// dodałem
UpdateData(TRUE);
GetDlgItem(IDOK)->EnableWindow(m_strIPAddress.IsEmpty() == FALSE && m_Port > 0);
// TODO: Add your control notification handler code here
//*pResult = 0;
}
void Dialog::OnIpnFieldchangedIpaddress1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMIPADDRESS pIPAddr = reinterpret_cast<LPNMIPADDRESS>(pNMHDR);
// TODO: Add your control notification handler code here
//dodałem
UpdateData(TRUE);
GetDlgItem(IDOK)->EnableWindow(m_strIPAddress.IsEmpty() == FALSE && m_Port > 0);
//----------
*pResult = 0;
}
/*bool Dialog::OnInitDialog()
{
//_TSP_DTRACE(" -- Config OnInitDialog -- ");
// Write the data out
*/
//m_strIPAddress = GetUISP()->ReadProfileString (m_dwProviderID, _T("IPServer")/*, _T("127.0.0.1")*/);
//m_Port = GetSP()->ReadProfileDWord (m_dwProviderID, _T("Port"), 5060);
/*
// Connect up the elements to the dialgo.
CDialog::OnInitDialog();
OnChangeIpaddress();
// Center the window
CenterWindow();
// Let Windows process focus.
return TRUE;
}*/
Nie jestem pawiem czy ten stan już jest faktycznie dobry, ale tak jak widać nie ma tu tego CDialog::OnInitDialog(void) o którego krzyczy linker. Biblioteki na pewno wszystkie mam dołączone dobrze, bo przed moim grzebaniem w tym GUI wszystko było ok - nawet pojawiało się okienko tylko bez żadnej logiki.
Dodatkowo dziwi mnie fakt, że teraz też spróbowałem skompilować wcześniej zapisane wersje gdzie jeszcze nie zajmowałem się tym GUI i dostaje ten sam błąd :/
Dzięki z góry za wszelką pomoc
Michał