Erreur link

Bonjour,

j'ai un projet programme sur visual C++ 6
lors de compilation me sors des erreurs de link ca due a quoi
voila mon programma

ccDLL_BillValitador.cpp

#include "stdafx.h"
#include "ccDLL_Test.h"
#include "ccDLL_BillValidator.h"

IMPLEMENT_DYNAMIC(ccDLL_BillValidator, CDialog)

ccDLL_BillValidator::ccDLL_BillValidator(CWnd* pParent /*=NULL*/)
: CDialog(ccDLL_BillValidator::IDD_BILLVALIDATOR, pParent)
, m_Val00(_T(""))
, m_Val01(_T(""))
, m_Val02(_T(""))
, m_Val03(_T(""))
, m_Val04(_T(""))
, m_Val05(_T(""))
, m_Val06(_T(""))
, m_Val07(_T(""))
, m_Val08(_T(""))
, m_Val09(_T(""))
, m_Val10(_T(""))
, m_Val11(_T(""))
, m_Val12(_T(""))
, m_Val14(_T(""))
, m_Val15(_T(""))
, m_Val13(_T(""))
, m_Curr00(_T(""))
, m_Curr01(_T(""))
, m_Curr02(_T(""))
, m_Curr03(_T(""))
, m_Curr04(_T(""))
, m_Curr05(_T(""))
, m_Curr06(_T(""))
, m_Curr07(_T(""))
, m_Curr08(_T(""))
, m_Curr09(_T(""))
, m_Curr10(_T(""))
, m_Curr11(_T(""))
, m_Curr12(_T(""))
, m_Curr13(_T(""))
, m_Curr14(_T(""))
, m_Curr15(_T(""))
, m_Enab00(FALSE)
, m_Enab01(FALSE)
, m_Enab02(FALSE)
, m_Enab03(FALSE)
, m_Enab04(FALSE)
, m_Enab05(FALSE)
, m_Enab06(FALSE)
, m_Enab07(FALSE)
, m_Enab08(FALSE)
, m_Enab09(FALSE)
, m_Enab10(FALSE)
, m_Enab11(FALSE)
, m_Enab12(FALSE)
, m_Enab13(FALSE)
, m_Enab14(FALSE)
, m_Enab15(FALSE)
, m_LastBill(_T(""))
, m_DoPoll(FALSE)
, m_MasterInhibit(FALSE)
, m_EscrowEnable(FALSE)
, m_Result(0)
, m_PIN(_T("123456"))
{
m_values[ 0] = &m_Val00;
m_values[ 1] = &m_Val01;
m_values[ 2] = &m_Val02;
m_values[ 3] = &m_Val03;
m_values[ 4] = &m_Val04;
m_values[ 5] = &m_Val05;
m_values[ 6] = &m_Val06;
m_values[ 7] = &m_Val07;
m_values[ 8] = &m_Val08;
m_values[ 9] = &m_Val09;
m_values[10] = &m_Val10;
m_values[11] = &m_Val11;
m_values[12] = &m_Val12;
m_values[13] = &m_Val13;
m_values[14] = &m_Val14;
m_values[15] = &m_Val15;
m_currencies[ 0] = &m_Curr00;
m_currencies[ 1] = &m_Curr01;
m_currencies[ 2] = &m_Curr02;
m_currencies[ 3] = &m_Curr03;
m_currencies[ 4] = &m_Curr04;
m_currencies[ 5] = &m_Curr05;
m_currencies[ 6] = &m_Curr06;
m_currencies[ 7] = &m_Curr07;
m_currencies[ 8] = &m_Curr08;
m_currencies[ 9] = &m_Curr09;
m_currencies[10] = &m_Curr10;
m_currencies[11] = &m_Curr11;
m_currencies[12] = &m_Curr12;
m_currencies[13] = &m_Curr13;
m_currencies[14] = &m_Curr14;
m_currencies[15] = &m_Curr15;
m_enables[ 0] = &m_Enab00;
m_enables[ 1] = &m_Enab01;
m_enables[ 2] = &m_Enab02;
m_enables[ 3] = &m_Enab03;
m_enables[ 4] = &m_Enab04;
m_enables[ 5] = &m_Enab05;
m_enables[ 6] = &m_Enab06;
m_enables[ 7] = &m_Enab07;
m_enables[ 8] = &m_Enab08;
m_enables[ 9] = &m_Enab09;
m_enables[10] = &m_Enab10;
m_enables[11] = &m_Enab11;
m_enables[12] = &m_Enab12;
m_enables[13] = &m_Enab13;
m_enables[14] = &m_Enab14;
m_enables[15] = &m_Enab15;

m_tmrid = 0;
}

ccDLL_BillValidator::~ccDLL_BillValidator()
{
}

void ccDLL_BillValidator::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_Val00);
DDX_Text(pDX, IDC_EDIT11, m_Val01);
DDX_Text(pDX, IDC_EDIT13, m_Val02);
DDX_Text(pDX, IDC_EDIT15, m_Val03);
DDX_Text(pDX, IDC_EDIT17, m_Val04);
DDX_Text(pDX, IDC_EDIT19, m_Val05);
DDX_Text(pDX, IDC_EDIT21, m_Val06);
DDX_Text(pDX, IDC_EDIT23, m_Val07);
DDX_Text(pDX, IDC_EDIT25, m_Val08);
DDX_Text(pDX, IDC_EDIT27, m_Val09);
DDX_Text(pDX, IDC_EDIT29, m_Val10);
DDX_Text(pDX, IDC_EDIT31, m_Val11);
DDX_Text(pDX, IDC_EDIT33, m_Val12);
DDX_Text(pDX, IDC_EDIT37, m_Val14);
DDX_Text(pDX, IDC_EDIT39, m_Val15);
DDX_Text(pDX, IDC_EDIT35, m_Val13);
DDX_Text(pDX, IDC_EDIT10, m_Curr00);
DDX_Text(pDX, IDC_EDIT14, m_Curr02);
DDX_Text(pDX, IDC_EDIT16, m_Curr03);
DDX_Text(pDX, IDC_EDIT18, m_Curr04);
DDX_Text(pDX, IDC_EDIT20, m_Curr05);
DDX_Text(pDX, IDC_EDIT22, m_Curr06);
DDX_Text(pDX, IDC_EDIT24, m_Curr07);
DDX_Text(pDX, IDC_EDIT26, m_Curr08);
DDX_Text(pDX, IDC_EDIT28, m_Curr09);
DDX_Text(pDX, IDC_EDIT30, m_Curr10);
DDX_Text(pDX, IDC_EDIT32, m_Curr11);
DDX_Text(pDX, IDC_EDIT34, m_Curr12);
DDX_Text(pDX, IDC_EDIT36, m_Curr13);
DDX_Text(pDX, IDC_EDIT38, m_Curr14);
DDX_Text(pDX, IDC_EDIT40, m_Curr15);
DDX_Check(pDX, IDC_CHECK1, m_Enab00);
DDX_Check(pDX, IDC_CHECK2, m_Enab01);
DDX_Check(pDX, IDC_CHECK3, m_Enab02);
DDX_Check(pDX, IDC_CHECK4, m_Enab03);
DDX_Check(pDX, IDC_CHECK5, m_Enab04);
DDX_Check(pDX, IDC_CHECK6, m_Enab05);
DDX_Check(pDX, IDC_CHECK7, m_Enab06);
DDX_Check(pDX, IDC_CHECK8, m_Enab07);
DDX_Check(pDX, IDC_CHECK9, m_Enab08);
DDX_Check(pDX, IDC_CHECK10, m_Enab09);
DDX_Check(pDX, IDC_CHECK11, m_Enab10);
DDX_Check(pDX, IDC_CHECK12, m_Enab11);
DDX_Check(pDX, IDC_CHECK13, m_Enab12);
DDX_Check(pDX, IDC_CHECK14, m_Enab13);
DDX_Check(pDX, IDC_CHECK15, m_Enab14);
DDX_Check(pDX, IDC_CHECK16, m_Enab15);
DDX_Text(pDX, IDC_EDIT41, m_LastBill);
DDX_Check(pDX, IDC_CHECK17, m_DoPoll);
DDX_Check(pDX, IDC_CHKINHIBIT, m_MasterInhibit);
DDX_Control(pDX, IDC_CBXBILLROUTE, m_cbxBillRoute);
DDX_Text(pDX, IDC_EDIT49, m_PIN);
}

BEGIN_MESSAGE_MAP(ccDLL_BillValidator, CDialog)
ON_BN_CLICKED(IDC_BTNREAD, ccDLL_BillValidator::OnBnClickedBtnread)
ON_BN_CLICKED(IDCANCEL, ccDLL_BillValidator::OnBnClickedCancel)
ON_BN_CLICKED(IDC_CHECK17, ccDLL_BillValidator::OnBnClickedCheck17)
ON_WM_CLOSE()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BTNRESET, ccDLL_BillValidator::OnBnClickedBtnreset)
ON_BN_CLICKED(IDC_BTNSET, ccDLL_BillValidator::OnBnClickedBtnset)
ON_BN_CLICKED(IDC_BTNINHIBIT, ccDLL_BillValidator::OnBnClickedBtninhibit)
ON_BN_CLICKED(IDC_BTNINHIBIT2, ccDLL_BillValidator::OnBnClickedBtninhibit2)
ON_BN_CLICKED(IDC_BTNESCROW2, ccDLL_BillValidator::OnBnClickedBtnescrow2)
ON_WM_SHOWWINDOW()
ON_BN_CLICKED(IDC_BTNROUTEBILL, ccDLL_BillValidator::OnBnClickedBtnroutebill)
ON_BN_CLICKED(IDC_BTNCHANGEPIN, ccDLL_BillValidator::OnBnClickedBtnchangepin)
END_MESSAGE_MAP()

void ccDLL_BillValidator::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);

m_cbxBillRoute.AddString("Return");
m_cbxBillRoute.AddString("Stack");
m_cbxBillRoute.AddString("Extend");
m_cbxBillRoute.SetCurSel(0);
}

void ccDLL_BillValidator::OnBnClickedCancel()
{
OnCancel();
}

void ccDLL_BillValidator::OnClose()
{
if (m_tmrid != NULL)
{
int res = KillTimer(m_tmrid);
if (res) m_tmrid = NULL;
}

CDialog::OnClose();
}

void ccDLL_BillValidator::OnBnClickedCheck17()
{
if (m_tmrid != NULL)
{
int res = KillTimer(m_tmrid);
if (res) m_tmrid = NULL;
}
UpdateData(1);
if (m_DoPoll)
{
m_tmrid = SetTimer(1, 200, NULL);
}
}

// Poll the valdator
void ccDLL_BillValidator::OnTimer(UINT_PTR nIDEvent)
{
CCTALK_BILLEVENTS evts;
int evtctr;
CString posstr;

UpdateData(1);
m_Result = m_pCcVal->Poll(&evtctr, evts);

if (evtctr > 0)
{
if (evts[evtctr - 1].Status == CCBPOLL_BILL)
{
switch (evts[evtctr - 1].Position)
{
case CCBILLPOS_ESCROW:
posstr = "Escrow";
break;
case CCBILLPOS_STACKED:
posstr = "Stacked";
break;
default:
posstr = "Unknown";
break;
}
m_LastBill.Format("Bill: %0.2f %s - %s",
m_bills[evts[evtctr - 1].BillIndex].Value,
m_bills[evts[evtctr - 1].BillIndex].Currency,
posstr);
}
else
{
m_LastBill.Format("Status: %d", evts[evtctr - 1].Status);
}
}

CDialog::OnTimer(nIDEvent);
UpdateData(0);
}

void ccDLL_BillValidator::OnBnClickedBtnreset()
{
UpdateData(1);
m_Result = m_pCcVal->Reset();
UpdateData(0);
}

void ccDLL_BillValidator::OnBnClickedBtnread()
{
UpdateData(1);
for (int i = 0; i < MAX_BILLS; i++)
{
*m_values[i] = "";
*m_currencies[i] = "";
*m_enables[i] = false;
}
if ((m_Result = m_pCcVal->GetBillStatus(m_bills)) == CCERR_OK)
{
for (int i = 0; i < MAX_BILLS; i++)
{
m_values[i]->Format("%0.2f", m_bills[i].Value);
*m_currencies[i] = m_bills[i].Currency;
*m_enables[i] = m_bills[i].Enable;
}
}
UpdateData(0);
}

void ccDLL_BillValidator::OnBnClickedBtnset()
{
UpdateData(1);
for (int i = 0; i < MAX_BILLS; i++) m_bills[i].Enable = *m_enables[i];
m_Result = m_pCcVal->SetBillEnable(m_bills);
UpdateData(0);
}

void ccDLL_BillValidator::OnBnClickedBtninhibit()
{
UpdateData(1);
m_Result = m_pCcVal->GetMasterInhibit(&m_MasterInhibit);
UpdateData(0);
}

void ccDLL_BillValidator::OnBnClickedBtninhibit2()
{
UpdateData(1);
m_Result = m_pCcVal->SetMasterInhibit(m_MasterInhibit);
UpdateData(0);
}

void ccDLL_BillValidator::OnBnClickedBtnescrow2()
{
UpdateData(1);
m_Result = m_pCcVal->GetEscrowEnable(&m_EscrowEnable);
UpdateData(0);
}

void ccDLL_BillValidator::OnBnClickedBtnescrow()
{
UpdateData(1);
m_Result = m_pCcVal->SetEscrowEnable(m_EscrowEnable);
UpdateData(0);
}

void ccDLL_BillValidator::OnBnClickedBtnroutebill()
{
UpdateData(1);
switch (m_cbxBillRoute.GetCurSel())
{
case 0:
m_Result = m_pCcVal->RouteBill(CCBROUTE_RETURN);
break;
case 1:
m_Result = m_pCcVal->RouteBill(CCBROUTE_STACK);
break;
case 2:
m_Result = m_pCcVal->RouteBill(CCBROUTE_EXTEND);
break;
}
UpdateData(0);
}

void ccDLL_BillValidator::OnBnClickedBtnchangepin()
{
LPTSTR pinbff = m_PIN.GetBuffer(0);
if (m_PIN.GetLength() == 6)
for (int i = 0; i < 6; i++) m_pin[i] = pinbff[i] - '0';
else
for (int i = 0; i < 6; i++) m_pin[i] = 0;
m_pCcVal->ChangePINCode(m_pin);
}

ccDLL_coinselector.cpp

#include "stdafx.h"
#include "ccDLL_Test.h"
#include "ccDLL_CoinSelector.h"

IMPLEMENT_DYNAMIC(ccDLL_CoinSelector, CDialog)

ccDLL_CoinSelector::ccDLL_CoinSelector(CWnd* pParent /*=NULL*/)
: CDialog(ccDLL_CoinSelector::IDD_COINSELECTOR, pParent)
, m_Val00(_T(""))
, m_Val01(_T(""))
, m_Val02(_T(""))
, m_Val03(_T(""))
, m_Val04(_T(""))
, m_Val05(_T(""))
, m_Val06(_T(""))
, m_Val07(_T(""))
, m_Val08(_T(""))
, m_Val09(_T(""))
, m_Val10(_T(""))
, m_Val11(_T(""))
, m_Val12(_T(""))
, m_Val14(_T(""))
, m_Val15(_T(""))
, m_Curr00(_T(""))
, m_Curr01(_T(""))
, m_Curr02(_T(""))
, m_Curr03(_T(""))
, m_Curr04(_T(""))
, m_Curr05(_T(""))
, m_Curr06(_T(""))
, m_Curr07(_T(""))
, m_Curr08(_T(""))
, m_Curr09(_T(""))
, m_Curr10(_T(""))
, m_Curr11(_T(""))
, m_Curr12(_T(""))
, m_Curr13(_T(""))
, m_Curr14(_T(""))
, m_Curr15(_T(""))
, m_Enab00(FALSE)
, m_Enab01(FALSE)
, m_Enab02(FALSE)
, m_Enab03(FALSE)
, m_Enab04(FALSE)
, m_Enab05(FALSE)
, m_Enab06(FALSE)
, m_Enab07(FALSE)
, m_Enab08(FALSE)
, m_Enab09(FALSE)
, m_Enab10(FALSE)
, m_Enab12(FALSE)
, m_Enab13(FALSE)
, m_Enab14(FALSE)
, m_Enab15(FALSE)
, m_Enab11(FALSE)
, m_DoPoll(FALSE)
, m_LastCoin(_T(""))
{
m_values[ 0] = &m_Val00;
m_values[ 1] = &m_Val01;
m_values[ 2] = &m_Val02;
m_values[ 3] = &m_Val03;
m_values[ 4] = &m_Val04;
m_values[ 5] = &m_Val05;
m_values[ 6] = &m_Val06;
m_values[ 7] = &m_Val07;
m_values[ 8] = &m_Val08;
m_values[ 9] = &m_Val09;
m_values[10] = &m_Val10;
m_values[11] = &m_Val11;
m_values[12] = &m_Val12;
m_values[13] = &m_Val13;
m_values[14] = &m_Val14;
m_values[15] = &m_Val15;
m_currencies[ 0] = &m_Curr00;
m_currencies[ 1] = &m_Curr01;
m_currencies[ 2] = &m_Curr02;
m_currencies[ 3] = &m_Curr03;
m_currencies[ 4] = &m_Curr04;
m_currencies[ 5] = &m_Curr05;
m_currencies[ 6] = &m_Curr06;
m_currencies[ 7] = &m_Curr07;
m_currencies[ 8] = &m_Curr08;
m_currencies[ 9] = &m_Curr09;
m_currencies[10] = &m_Curr10;
m_currencies[11] = &m_Curr11;
m_currencies[12] = &m_Curr12;
m_currencies[13] = &m_Curr13;
m_currencies[14] = &m_Curr14;
m_currencies[15] = &m_Curr15;
m_enables[ 0] = &m_Enab00;
m_enables[ 1] = &m_Enab01;
m_enables[ 2] = &m_Enab02;
m_enables[ 3] = &m_Enab03;
m_enables[ 4] = &m_Enab04;
m_enables[ 5] = &m_Enab05;
m_enables[ 6] = &m_Enab06;
m_enables[ 7] = &m_Enab07;
m_enables[ 8] = &m_Enab08;
m_enables[ 9] = &m_Enab09;
m_enables[10] = &m_Enab10;
m_enables[11] = &m_Enab11;
m_enables[12] = &m_Enab12;
m_enables[13] = &m_Enab13;
m_enables[14] = &m_Enab14;
m_enables[15] = &m_Enab15;

m_tmrid = 0;
}

ccDLL_CoinSelector::~ccDLL_CoinSelector()
{
}

void ccDLL_CoinSelector::OnClose()
{
if (m_tmrid != NULL)
{
int res = KillTimer(m_tmrid);
if (res) m_tmrid = NULL;
}

CDialog::OnClose();
}

void ccDLL_CoinSelector::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_Val00);
DDX_Text(pDX, IDC_EDIT11, m_Val01);
DDX_Text(pDX, IDC_EDIT13, m_Val02);
DDX_Text(pDX, IDC_EDIT15, m_Val03);
DDX_Text(pDX, IDC_EDIT17, m_Val04);
DDX_Text(pDX, IDC_EDIT19, m_Val05);
DDX_Text(pDX, IDC_EDIT21, m_Val06);
DDX_Text(pDX, IDC_EDIT23, m_Val07);
DDX_Text(pDX, IDC_EDIT25, m_Val08);
DDX_Text(pDX, IDC_EDIT27, m_Val09);
DDX_Text(pDX, IDC_EDIT29, m_Val10);
DDX_Text(pDX, IDC_EDIT31, m_Val11);
DDX_Text(pDX, IDC_EDIT33, m_Val12);
DDX_Text(pDX, IDC_EDIT37, m_Val14);
DDX_Text(pDX, IDC_EDIT39, m_Val15);
DDX_Control(pDX, IDC_BTNREAD, m_btnRead);
DDX_Control(pDX, IDC_BTNSET, m_btnSet);
DDX_Text(pDX, IDC_EDIT10, m_Curr00);
DDX_Text(pDX, IDC_EDIT12, m_Curr01);
DDX_Text(pDX, IDC_EDIT14, m_Curr02);
DDX_Text(pDX, IDC_EDIT16, m_Curr03);
DDX_Text(pDX, IDC_EDIT18, m_Curr04);
DDX_Text(pDX, IDC_EDIT20, m_Curr05);
DDX_Text(pDX, IDC_EDIT22, m_Curr06);
DDX_Text(pDX, IDC_EDIT24, m_Curr07);
DDX_Text(pDX, IDC_EDIT26, m_Curr08);
DDX_Text(pDX, IDC_EDIT28, m_Curr09);
DDX_Text(pDX, IDC_EDIT30, m_Curr10);
DDX_Text(pDX, IDC_EDIT32, m_Curr11);
DDX_Text(pDX, IDC_EDIT34, m_Curr12);
DDX_Text(pDX, IDC_EDIT36, m_Curr13);
DDX_Text(pDX, IDC_EDIT38, m_Curr14);
DDX_Text(pDX, IDC_EDIT40, m_Curr15);
DDX_Check(pDX, IDC_CHECK1, m_Enab00);
DDX_Check(pDX, IDC_CHECK2, m_Enab01);
DDX_Check(pDX, IDC_CHECK3, m_Enab02);
DDX_Check(pDX, IDC_CHECK4, m_Enab03);
DDX_Check(pDX, IDC_CHECK5, m_Enab04);
DDX_Check(pDX, IDC_CHECK6, m_Enab05);
DDX_Check(pDX, IDC_CHECK7, m_Enab06);
DDX_Check(pDX, IDC_CHECK8, m_Enab07);
DDX_Check(pDX, IDC_CHECK9, m_Enab08);
DDX_Check(pDX, IDC_CHECK10, m_Enab09);
DDX_Check(pDX, IDC_CHECK11, m_Enab10);
DDX_Check(pDX, IDC_CHECK13, m_Enab12);
DDX_Check(pDX, IDC_CHECK14, m_Enab13);
DDX_Check(pDX, IDC_CHECK15, m_Enab14);
DDX_Check(pDX, IDC_CHECK16, m_Enab15);
DDX_Check(pDX, IDC_CHECK12, m_Enab11);
DDX_Check(pDX, IDC_CHECK17, m_DoPoll);
DDX_Text(pDX, IDC_EDIT41, m_LastCoin);
}

BEGIN_MESSAGE_MAP(ccDLL_CoinSelector, CDialog)
ON_BN_CLICKED(IDCANCEL, ccDLL_CoinSelector::OnBnClickedCancel)
ON_BN_CLICKED(IDC_BTNREAD, ccDLL_CoinSelector::OnBnClickedBtnread)
ON_BN_CLICKED(IDC_BTNSET, ccDLL_CoinSelector::OnBnClickedBtnset)
ON_BN_CLICKED(IDC_CHECK17, ccDLL_CoinSelector::OnBnClickedCheck17)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BTNRESET, ccDLL_CoinSelector::OnBnClickedBtnreset)
ON_WM_CLOSE()
END_MESSAGE_MAP()

void ccDLL_CoinSelector::OnBnClickedCancel()
{
OnCancel();
}

void ccDLL_CoinSelector::OnBnClickedBtnread()
{
m_pCcSel->GetCoinStatus(m_coins);
for (int i = 0; i < MAX_COINS; i++)
{
m_values[i]->Format("%0.2f", m_coins[i].Value);
*m_currencies[i] = m_coins[i].Currency;
*m_enables[i] = m_coins[i].Enable;
}
UpdateData(0);
}

void ccDLL_CoinSelector::OnBnClickedBtnset()
{
UpdateData(1);
for (int i = 0; i < MAX_COINS; i++)
{
m_coins[i].Enable = *m_enables[i];
}
m_pCcSel->SetCoinEnable(m_coins);
}

void ccDLL_CoinSelector::OnBnClickedBtnreset()
{
m_pCcSel->Reset();
}

void ccDLL_CoinSelector::OnBnClickedCheck17()
{
if (m_tmrid != NULL)
{
int res = KillTimer(m_tmrid);
if (res) m_tmrid = NULL;
}
UpdateData(1);
if (m_DoPoll)
{
m_tmrid = SetTimer(1, 200, NULL);
}
}

void ccDLL_CoinSelector::OnTimer(UINT_PTR nIDEvent)
{
CCTALK_COINEVENTS evts;
int evtctr;

m_pCcSel->Poll(&evtctr, evts);

if (evtctr > 0)
{
if (evts[evtctr - 1].Status == CCCPOLL_COIN)
{
m_LastCoin.Format("Coin: %0.2f %s (%d)",
m_coins[evts[evtctr - 1].CoinIndex].Value,
m_coins[evts[evtctr - 1].CoinIndex].Currency,
evts[evtctr - 1].Path);
}
else
{
m_LastCoin.Format("Status: %d", evts[evtctr - 1].Status);
}
UpdateData(0);
}

CDialog::OnTimer(nIDEvent);
}

les messages d'erreurs sont:
Linking...
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CBillValidator::Poll(int *,struct CCTALK_BILLEVENT * const)" (?Poll@CBillValidator@@QAEHPAHQAUCCTALK_BILLEVENT@@@Z)
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CcTalkDevice::Reset(void)" (?Reset@CcTalkDevice@@QAEHXZ)
ccDLL_CoinSelector.obj : error LNK2001: unresolved external symbol "public: int __thiscall CcTalkDevice::Reset(void)" (?Reset@CcTalkDevice@@QAEHXZ)
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CBillValidator::GetBillStatus(struct CCTALK_BILLENTRY * const)" (?GetBillStatus@CBillValidator@@QAEHQAUCCTALK_BILLENTRY@@@Z)
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CBillValidator::SetBillEnable(struct CCTALK_BILLENTRY * const)" (?SetBillEnable@CBillValidator@@QAEHQAUCCTALK_BILLENTRY@@@Z)
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CBillValidator::GetMasterInhibit(int *)" (?GetMasterInhibit@CBillValidator@@QAEHPAH@Z)
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CBillValidator::SetMasterInhibit(int)" (?SetMasterInhibit@CBillValidator@@QAEHH@Z)
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CBillValidator::GetEscrowEnable(int *)" (?GetEscrowEnable@CBillValidator@@QAEHPAH@Z)
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CBillValidator::SetEscrowEnable(int)" (?SetEscrowEnable@CBillValidator@@QAEHH@Z)
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CBillValidator::RouteBill(int)" (?RouteBill@CBillValidator@@QAEHH@Z)
ccDLL_BillValidator.obj : error LNK2001: unresolved external symbol "public: int __thiscall CcTalkDevice::ChangePINCode(unsigned char *)" (?ChangePINCode@CcTalkDevice@@QAEHPAE@Z)
ccDLL_CoinSelector.obj : error LNK2001: unresolved external symbol "public: int __thiscall CCoinSelector::GetCoinStatus(struct CCTALK_COINENTRY * const)" (?GetCoinStatus@CCoinSelector@@QAEHQAUCCTALK_COINENTRY@@@Z)
ccDLL_CoinSelector.obj : error LNK2001: unresolved external symbol "public: int __thiscall CCoinSelector::SetCoinEnable(struct CCTALK_COINENTRY * const)" (?SetCoinEnable@CCoinSelector@@QAEHQAUCCTALK_COINENTRY@@@Z)
ccDLL_CoinSelector.obj : error LNK2001: unresolved external symbol "public: int __thiscall CCoinSelector::Poll(int *,struct CCTALK_COINEVENT * const)" (?Poll@CCoinSelector@@QAEHPAHQAUCCTALK_COINEVENT@@@Z)
Debug/Monnayeur.exe : fatal error LNK1120: 13 unresolved externals
Error executing link.exe.

comment je les corrige
merci
Configuration: Windows XP
Firefox 2.0.0.16

17 réponses

  • Votes
  • Date
  • Date décroissante
  1. bonjour;
    merci pour ta reponse mais je ne puisse pas a resoudre ce probleme
    vous pouvez me dire qu'est ce que je vais faire exactement
    merci d'avance
    1. je n'ai pas programmee dlgcore.cpp , il est sous visual
      je vais t'expliquer qu'est ce que je veux faire exactement
      je veux creer une bouton qui ouvre une boite de dialogue pour cela j'ai ecrit mon xxxxVieu.cpp le code suivant:
      void CxxxxView::OnButton()
      CDialog Dlg ;
      Dlg.DoModal();
      et quand je fais l'execution j'obtient le probleme d'assertion qui je te l'ai explique precedament
      merci d'avance
      1. voila mon code dlgcore.cpp
        // This is a part of the Microsoft Foundation Classes C++ library.
        // Copyright (C) 1992-1998 Microsoft Corporation
        // All rights reserved.
        //
        // This source code is only intended as a supplement to the
        // Microsoft Foundation Classes Reference and related
        // electronic documentation provided with the library.
        // See these sources for detailed information regarding the
        // Microsoft Foundation Classes product.

        #include "stdafx.h"
        #include "occimpl.h"

        #ifdef AFX_CORE1_SEG
        #pragma code_seg(AFX_CORE1_SEG)
        #endif

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

        #define new DEBUG_NEW

        /////////////////////////////////////////////////////////////////////////////
        // AfxDlgProc - does nothing since all messages are handled via AfxWndProc

        BOOL CALLBACK AfxDlgProc(HWND hWnd, UINT message, WPARAM, LPARAM)
        {
        if (message == WM_INITDIALOG)
        {
        // special case for WM_INITDIALOG
        CDialog* pDlg = DYNAMIC_DOWNCAST(CDialog, CWnd::FromHandlePermanent(hWnd));
        if (pDlg != NULL)
        return pDlg->OnInitDialog();
        else
        return 1;
        }
        return 0;
        }

        /////////////////////////////////////////////////////////////////////////////
        // CDialog - Modeless and Modal

        BEGIN_MESSAGE_MAP(CDialog, CWnd)
        #ifndef _AFX_NO_GRAYDLG_SUPPORT
        ON_WM_CTLCOLOR()
        #endif
        //{{AFX_MSG_MAP(CDialog)
        ////ON_COMMAND(IDOK, OnOK)
        //ON_COMMAND(IDCANCEL, OnCancel)
        //ON_MESSAGE(WM_COMMANDHELP, OnCommandHelp)
        //ON_MESSAGE(WM_HELPHITTEST, OnHelpHitTest)
        ON_MESSAGE(WM_INITDIALOG, HandleInitDialog)
        ON_MESSAGE(WM_SETFONT, HandleSetFont)
        //}}AFX_MSG_MAP
        #ifndef _AFX_NO_CTL3D_SUPPORT
        // ON_MESSAGE(WM_QUERY3DCONTROLS, OnQuery3dControls)
        #endif
        END_MESSAGE_MAP()

        BOOL CDialog::PreTranslateMessage(MSG* pMsg)
        {
        // for modeless processing (or modal)
        ASSERT(m_hWnd != NULL);

        // allow tooltip messages to be filtered
        if (CWnd::PreTranslateMessage(pMsg))
        return TRUE;

        // don't translate dialog messages when in Shift+F1 help mode
        CFrameWnd* pFrameWnd = GetTopLevelFrame();
        if (pFrameWnd != NULL && pFrameWnd->m_bHelpMode)
        return FALSE;

        // fix around for VK_ESCAPE in a multiline Edit that is on a Dialog
        // that doesn't have a cancel or the cancel is disabled.
        if (pMsg->message == WM_KEYDOWN &&
        (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_CANCEL) &&
        (::GetWindowLong(pMsg->hwnd, GWL_STYLE) & ES_MULTILINE) &&
        _AfxCompareClassName(pMsg->hwnd, _T("Edit")))
        {
        HWND hItem = ::GetDlgItem(m_hWnd, IDCANCEL);
        if (hItem == NULL || ::IsWindowEnabled(hItem))
        {
        SendMessage(WM_COMMAND, IDCANCEL, 0);
        return TRUE;
        }
        }
        // filter both messages to dialog and from children
        return PreTranslateInput(pMsg);
        }

        BOOL CDialog::OnCmdMsg(UINT nID, int nCode, void* pExtra,
        AFX_CMDHANDLERINFO* pHandlerInfo)
        {
        if (CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
        return TRUE;

        if ((nCode != CN_COMMAND && nCode != CN_UPDATE_COMMAND_UI) ||
        !IS_COMMAND_ID(nID) || nID >= 0xf000)
        {
        // control notification or non-command button or system command
        return FALSE; // not routed any further
        }

        // if we have an owner window, give it second crack
        CWnd* pOwner = GetParent();
        if (pOwner != NULL)
        {
        #ifdef _DEBUG
        if (afxTraceFlags & traceCmdRouting)
        TRACE1("Routing command id 0x%04X to owner window.\n", nID);
        #endif
        ASSERT(pOwner != this);
        if (pOwner->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
        return TRUE;
        }

        // last crack goes to the current CWinThread object
        CWinThread* pThread = AfxGetThread();
        if (pThread != NULL)
        {
        #ifdef _DEBUG
        if (afxTraceFlags & traceCmdRouting)
        TRACE1("Routing command id 0x%04X to app.\n", nID);
        #endif
        if (pThread->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
        return TRUE;
        }

        #ifdef _DEBUG
        if (afxTraceFlags & traceCmdRouting)
        {
        TRACE2("IGNORING command id 0x%04X sent to %hs dialog.\n", nID,
        GetRuntimeClass()->m_lpszClassName);
        }
        #endif
        return FALSE;
        }

        /////////////////////////////////////////////////////////////////////////////
        // Modeless Dialogs have 2-phase construction

        CDialog::CDialog()
        {
        ASSERT(m_hWnd == NULL);
        AFX_ZERO_INIT_OBJECT(CWnd);
        }

        CDialog::~CDialog()
        {
        if (m_hWnd != NULL)
        {
        TRACE0("Warning: calling DestroyWindow in CDialog::~CDialog --\n");
        TRACE0("\tOnDestroy or PostNcDestroy in derived class will not be called.\n");
        DestroyWindow();
        }
        }

        BOOL CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
        {
        ASSERT(HIWORD(lpszTemplateName) == 0 ||
        AfxIsValidString(lpszTemplateName));

        m_lpszTemplateName = lpszTemplateName; // used for help
        if (HIWORD(m_lpszTemplateName) == 0 && m_nIDHelp == 0)
        m_nIDHelp = LOWORD((DWORD)m_lpszTemplateName);

        #ifdef _DEBUG
        if (!_AfxCheckDialogTemplate(lpszTemplateName, FALSE))
        {
        ASSERT(FALSE); // invalid dialog template name
        PostNcDestroy(); // cleanup if Create fails too soon
        return FALSE;
        }
        #endif //_DEBUG

        HINSTANCE hInst = AfxFindResourceHandle(lpszTemplateName, RT_DIALOG);
        HRSRC hResource = ::FindResource(hInst, lpszTemplateName, RT_DIALOG);
        HGLOBAL hTemplate = LoadResource(hInst, hResource);
        BOOL bResult = CreateIndirect(hTemplate, pParentWnd, hInst);
        FreeResource(hTemplate);

        return bResult;
        }

        // for backward compatibility
        BOOL CDialog::CreateIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd)
        {
        return CreateIndirect(hDialogTemplate, pParentWnd, NULL);
        }

        BOOL CDialog::CreateIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd,
        HINSTANCE hInst)
        {
        ASSERT(hDialogTemplate != NULL);

        LPCDLGTEMPLATE lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);
        BOOL bResult = CreateIndirect(lpDialogTemplate, pParentWnd, NULL, hInst);
        UnlockResource(hDialogTemplate);

        return bResult;
        }

        // for backward compatibility
        BOOL CDialog::CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd,
        void* lpDialogInit)
        {
        return CreateIndirect(lpDialogTemplate, pParentWnd, lpDialogInit, NULL);
        }

        BOOL CDialog::CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd,
        void* lpDialogInit, HINSTANCE hInst)
        {
        ASSERT(lpDialogTemplate != NULL);

        if (pParentWnd == NULL)
        pParentWnd = AfxGetMainWnd();
        m_lpDialogInit = lpDialogInit;

        return CreateDlgIndirect(lpDialogTemplate, pParentWnd, hInst);
        }

        BOOL CWnd::CreateDlg(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
        {
        // load resource
        LPCDLGTEMPLATE lpDialogTemplate = NULL;
        HGLOBAL hDialogTemplate = NULL;
        HINSTANCE hInst = AfxFindResourceHandle(lpszTemplateName, RT_DIALOG);
        HRSRC hResource = ::FindResource(hInst, lpszTemplateName, RT_DIALOG);
        hDialogTemplate = LoadResource(hInst, hResource);
        if (hDialogTemplate != NULL)
        lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);
        ASSERT(lpDialogTemplate != NULL);

        // create a modeless dialog
        BOOL bSuccess = CreateDlgIndirect(lpDialogTemplate, pParentWnd, hInst);

        // free resource
        UnlockResource(hDialogTemplate);
        FreeResource(hDialogTemplate);

        return bSuccess;
        }

        // for backward compatibility
        BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd)
        {
        return CreateDlgIndirect(lpDialogTemplate, pParentWnd, NULL);
        }

        BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate,
        CWnd* pParentWnd, HINSTANCE hInst)
        {
        ASSERT(lpDialogTemplate != NULL);
        if (pParentWnd != NULL)
        ASSERT_VALID(pParentWnd);

        if (hInst == NULL)
        hInst = AfxGetInstanceHandle();

        #ifndef _AFX_NO_OCC_SUPPORT
        _AFX_OCC_DIALOG_INFO occDialogInfo;
        COccManager* pOccManager = afxOccManager;
        #endif

        HGLOBAL hTemplate = NULL;

        HWND hWnd = NULL;
        #ifdef _DEBUG
        DWORD dwError = 0;
        #endif

        TRY
        {
        VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTLS_REG));
        AfxDeferRegisterClass(AFX_WNDCOMMCTLSNEW_REG);

        #ifndef _AFX_NO_OCC_SUPPORT
        // separately create OLE controls in the dialog template
        if (pOccManager != NULL)
        {
        if (!SetOccDialogInfo(&occDialogInfo))
        return FALSE;

        lpDialogTemplate = pOccManager->PreCreateDialog(&occDialogInfo,
        lpDialogTemplate);
        }

        if (lpDialogTemplate == NULL)
        return FALSE;
        #endif //!_AFX_NO_OCC_SUPPORT

        // If no font specified, set the system font.
        CString strFace;
        WORD wSize = 0;
        BOOL bSetSysFont = !CDialogTemplate::GetFont(lpDialogTemplate, strFace,
        wSize);

        // On DBCS systems, also change "MS Sans Serif" or "Helv" to system font.
        if ((!bSetSysFont) && GetSystemMetrics(SM_DBCSENABLED))
        {
        bSetSysFont = (strFace == _T("MS Shell Dlg") ||
        strFace == _T("MS Sans Serif") || strFace == _T("Helv"));
        if (bSetSysFont && (wSize == 8))
        wSize = 0;
        }

        if (bSetSysFont)
        {
        CDialogTemplate dlgTemp(lpDialogTemplate);
        dlgTemp.SetSystemFont(wSize);
        hTemplate = dlgTemp.Detach();
        }

        if (hTemplate != NULL)
        lpDialogTemplate = (DLGTEMPLATE*)GlobalLock(hTemplate);

        // setup for modal loop and creation
        m_nModalResult = -1;
        m_nFlags |= WF_CONTINUEMODAL;

        // create modeless dialog
        AfxHookWindowCreate(this);
        hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
        pParentWnd->GetSafeHwnd(), AfxDlgProc);
        #ifdef _DEBUG
        dwError = ::GetLastError();
        #endif
        }
        CATCH_ALL(e)
        {
        DELETE_EXCEPTION(e);
        m_nModalResult = -1;
        }
        END_CATCH_ALL

        #ifndef _AFX_NO_OCC_SUPPORT
        if (pOccManager != NULL)
        {
        pOccManager->PostCreateDialog(&occDialogInfo);
        if (hWnd != NULL)
        SetOccDialogInfo(NULL);
        }
        #endif //!_AFX_NO_OCC_SUPPORT

        if (!AfxUnhookWindowCreate())
        PostNcDestroy(); // cleanup if Create fails too soon

        // handle EndDialog calls during OnInitDialog
        if (hWnd != NULL && !(m_nFlags & WF_CONTINUEMODAL))
        {
        ::DestroyWindow(hWnd);
        hWnd = NULL;
        }

        if (hTemplate != NULL)
        {
        GlobalUnlock(hTemplate);
        GlobalFree(hTemplate);
        }

        // help with error diagnosis (only if WM_INITDIALOG didn't EndDialog())
        if (hWnd == NULL && (m_nFlags & WF_CONTINUEMODAL))
        {
        #ifdef _DEBUG
        #ifndef _AFX_NO_OCC_SUPPORT
        if (afxOccManager == NULL)
        {
        TRACE0(">>> If this dialog has OLE controls:\n");
        TRACE0(">>> AfxEnableControlContainer has not been called yet.\n");
        TRACE0(">>> You should call it in your app's InitInstance function.\n");
        }
        else if (dwError != 0)
        {
        TRACE1("Warning: Dialog creation failed! GetLastError returns 0x%8.8X\n", dwError);
        }
        #endif //!_AFX_NO_OCC_SUPPORT
        #endif //_DEBUG
        return FALSE;
        }

        ASSERT(hWnd == m_hWnd);
        return TRUE;
        }

        #ifndef _AFX_NO_OCC_SUPPORT

        BOOL CDialog::SetOccDialogInfo(_AFX_OCC_DIALOG_INFO* pOccDialogInfo)
        {
        m_pOccDialogInfo = pOccDialogInfo;
        return TRUE;
        }

        #endif

        /////////////////////////////////////////////////////////////////////////////
        // Modal Dialogs

        // Modal Constructors just save parameters
        CDialog::CDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
        {
        ASSERT(HIWORD(lpszTemplateName) == 0 ||
        AfxIsValidString(lpszTemplateName));

        AFX_ZERO_INIT_OBJECT(CWnd);

        m_pParentWnd = pParentWnd;
        m_lpszTemplateName = lpszTemplateName;
        if (HIWORD(m_lpszTemplateName) == 0)
        m_nIDHelp = LOWORD((DWORD)m_lpszTemplateName);
        }

        CDialog::CDialog(UINT nIDTemplate, CWnd* pParentWnd)
        {
        AFX_ZERO_INIT_OBJECT(CWnd);

        m_pParentWnd = pParentWnd;
        m_lpszTemplateName = MAKEINTRESOURCE(nIDTemplate);
        m_nIDHelp = nIDTemplate;
        }

        BOOL CDialog::InitModalIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd)
        {
        // must be called on an empty constructed CDialog
        ASSERT(m_lpszTemplateName == NULL);
        ASSERT(m_hDialogTemplate == NULL);
        ASSERT(hDialogTemplate != NULL);

        if (m_pParentWnd == NULL)
        m_pParentWnd = pParentWnd;

        m_hDialogTemplate = hDialogTemplate;

        return TRUE; // always ok (DoModal actually brings up dialog)
        }

        BOOL CDialog::InitModalIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd,
        void* lpDialogInit)
        {
        // must be called on an empty constructed CDialog
        ASSERT(m_lpszTemplateName == NULL);
        ASSERT(m_lpDialogTemplate == NULL);
        ASSERT(lpDialogTemplate != NULL);

        if (m_pParentWnd == NULL)
        m_pParentWnd = pParentWnd;

        m_lpDialogTemplate = lpDialogTemplate;
        m_lpDialogInit = lpDialogInit;

        return TRUE; // always ok (DoModal actually brings up dialog)
        }

        HWND CDialog::PreModal()
        {
        // cannot call DoModal on a dialog already constructed as modeless
        ASSERT(m_hWnd == NULL);

        // allow OLE servers to disable themselves
        CWinApp* pApp = AfxGetApp();
        if (pApp != NULL)
        pApp->EnableModeless(FALSE);

        // find parent HWND
        HWND hWnd = CWnd::GetSafeOwner_(m_pParentWnd->GetSafeHwnd(), &m_hWndTop);

        // hook for creation of dialog
        AfxHookWindowCreate(this);

        // return window to use as parent for dialog
        return hWnd;
        }

        void CDialog::PostModal()
        {
        AfxUnhookWindowCreate(); // just in case
        Detach(); // just in case

        // re-enable windows
        if (::IsWindow(m_hWndTop))
        ::EnableWindow(m_hWndTop, TRUE);
        m_hWndTop = NULL;
        CWinApp* pApp = AfxGetApp();
        if (pApp != NULL)
        pApp->EnableModeless(TRUE);
        }

        int CDialog::DoModal()
        {
        // can be constructed with a resource template or InitModalIndirect
        ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
        m_lpDialogTemplate != NULL);

        // load resource as necessary
        LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
        HGLOBAL hDialogTemplate = m_hDialogTemplate;
        HINSTANCE hInst = AfxGetResourceHandle();
        if (m_lpszTemplateName != NULL)
        {
        hInst = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
        HRSRC hResource = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
        hDialogTemplate = LoadResource(hInst, hResource);
        }
        if (hDialogTemplate != NULL)
        lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);

        // return -1 in case of failure to load the dialog template resource
        if (lpDialogTemplate == NULL)
        return -1;

        // disable parent (before creating dialog)
        HWND hWndParent = PreModal();
        AfxUnhookWindowCreate();
        BOOL bEnableParent = FALSE;
        if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))
        {
        ::EnableWindow(hWndParent, FALSE);
        bEnableParent = TRUE;
        }

        TRY
        {
        // create modeless dialog
        AfxHookWindowCreate(this);
        if (CreateDlgIndirect(lpDialogTemplate,
        CWnd::FromHandle(hWndParent), hInst))
        {
        if (m_nFlags & WF_CONTINUEMODAL)
        {
        // enter modal loop
        DWORD dwFlags = MLF_SHOWONIDLE;
        if (GetStyle() & DS_NOIDLEMSG)
        dwFlags |= MLF_NOIDLEMSG;
        VERIFY(RunModalLoop(dwFlags) == m_nModalResult);
        }

        // hide the window before enabling the parent, etc.
        if (m_hWnd != NULL)
        SetWindowPos(NULL, 0, 0, 0, 0, SWP_HIDEWINDOW|
        SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
        }
        }
        CATCH_ALL(e)
        {
        DELETE_EXCEPTION(e);
        m_nModalResult = -1;
        }
        END_CATCH_ALL

        if (bEnableParent)
        ::EnableWindow(hWndParent, TRUE);
        if (hWndParent != NULL && ::GetActiveWindow() == m_hWnd)
        ::SetActiveWindow(hWndParent);

        // destroy modal window
        DestroyWindow();
        PostModal();

        // unlock/free resources as necessary
        if (m_lpszTemplateName != NULL || m_hDialogTemplate != NULL)
        UnlockResource(hDialogTemplate);
        if (m_lpszTemplateName != NULL)
        FreeResource(hDialogTemplate);

        return m_nModalResult;
        }

        void CDialog::EndDialog(int nResult)
        {
        ASSERT(::IsWindow(m_hWnd));

        if (m_nFlags & (WF_MODALLOOP|WF_CONTINUEMODAL))
        EndModalLoop(nResult);

        ::EndDialog(m_hWnd, nResult);
        }

        /////////////////////////////////////////////////////////////////////////////
        // Standard CDialog implementation

        LRESULT CDialog::HandleSetFont(WPARAM wParam, LPARAM)
        {
        OnSetFont(CFont::FromHandle((HFONT)wParam));
        return Default();
        }

        void CDialog::PreInitDialog()
        {
        // ignore it
        }

        LRESULT CDialog::HandleInitDialog(WPARAM, LPARAM)
        {
        PreInitDialog();

        #ifndef _AFX_NO_OCC_SUPPORT
        // create OLE controls
        COccManager* pOccManager = afxOccManager;
        if ((pOccManager != NULL) && (m_pOccDialogInfo != NULL))
        {
        BOOL bDlgInit;
        if (m_lpDialogInit != NULL)
        bDlgInit = pOccManager->CreateDlgControls(this, m_lpDialogInit,
        m_pOccDialogInfo);
        else
        bDlgInit = pOccManager->CreateDlgControls(this, m_lpszTemplateName,
        m_pOccDialogInfo);

        if (!bDlgInit)
        {
        TRACE0("Warning: CreateDlgControls failed during dialog init.\n");
        EndDialog(-1);
        return FALSE;
        }
        }
        #endif

        // Default will call the dialog proc, and thus OnInitDialog
        BOOL bResult = Default();

        #ifndef _AFX_NO_OCC_SUPPORT
        if (bResult && (m_nFlags & WF_OLECTLCONTAINER))
        {
        CWnd* pWndNext = GetNextDlgTabItem(NULL);
        if (pWndNext != NULL)
        {
        pWndNext->SetFocus(); // UI Activate OLE control
        bResult = FALSE;
        }
        }
        #endif

        return bResult;
        }

        BOOL AFXAPI AfxHelpEnabled()
        {
        if (AfxGetApp() == NULL)
        return FALSE;

        // help is enabled if the app has a handler for ID_HELP
        AFX_CMDHANDLERINFO info;

        // check main window first
        CWnd* pWnd = AfxGetMainWnd();
        if (pWnd != NULL && pWnd->OnCmdMsg(ID_HELP, CN_COMMAND, NULL, &info))
        return TRUE;

        // check app last
        return AfxGetApp()->OnCmdMsg(ID_HELP, CN_COMMAND, NULL, &info);
        }

        void CDialog::OnSetFont(CFont*)
        {
        // ignore it
        }

        BOOL CDialog::OnInitDialog()
        {
        // execute dialog RT_DLGINIT resource
        BOOL bDlgInit;
        if (m_lpDialogInit != NULL)
        bDlgInit = ExecuteDlgInit(m_lpDialogInit);
        else
        bDlgInit = ExecuteDlgInit(m_lpszTemplateName);

        if (!bDlgInit)
        {
        TRACE0("Warning: ExecuteDlgInit failed during dialog init.\n");
        EndDialog(-1);
        return FALSE;
        }

        // transfer data into the dialog from member variables
        if (!UpdateData(FALSE))
        {
        TRACE0("Warning: UpdateData failed during dialog init.\n");
        EndDialog(-1);
        return FALSE;
        }

        // enable/disable help button automatically
        CWnd* pHelpButton = GetDlgItem(ID_HELP);
        if (pHelpButton != NULL)
        pHelpButton->ShowWindow(AfxHelpEnabled() ? SW_SHOW : SW_HIDE);

        return TRUE; // set focus to first one
        }

        void CDialog::OnOK()
        {
        if (!UpdateData(TRUE))
        {
        TRACE0("UpdateData failed during dialog termination.\n");
        // the UpdateData routine will set focus to correct item
        return;
        }
        EndDialog(IDOK);
        }

        void CDialog::OnCancel()
        {
        EndDialog(IDCANCEL);
        }

        BOOL CDialog::CheckAutoCenter()
        {
        // load resource as necessary
        LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
        HGLOBAL hDialogTemplate = m_hDialogTemplate;
        if (m_lpszTemplateName != NULL)
        {
        HINSTANCE hInst = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
        HRSRC hResource = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
        hDialogTemplate = LoadResource(hInst, hResource);
        }
        if (hDialogTemplate != NULL)
        lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);

        // determine if dialog should be centered
        BOOL bResult = TRUE;

        if (lpDialogTemplate != NULL)
        {
        DWORD dwStyle = lpDialogTemplate->style;
        short x;
        short y;

        if (((DLGTEMPLATEEX*)lpDialogTemplate)->signature == 0xFFFF)
        {
        // it's a DIALOGEX resource
        dwStyle = ((DLGTEMPLATEEX*)lpDialogTemplate)->style;
        x = ((DLGTEMPLATEEX*)lpDialogTemplate)->x;
        y = ((DLGTEMPLATEEX*)lpDialogTemplate)->y;
        }
        else
        {
        // it's a DIALOG resource
        x = lpDialogTemplate->x;
        y = lpDialogTemplate->y;
        }

        bResult = !(dwStyle & (DS_CENTER|DS_CENTERMOUSE|DS_ABSALIGN)) &&
        x == 0 && y == 0;
        }

        // unlock/free resources as necessary
        if (m_lpszTemplateName != NULL || m_hDialogTemplate != NULL)
        UnlockResource(hDialogTemplate);
        if (m_lpszTemplateName != NULL)
        FreeResource(hDialogTemplate);

        return bResult; // TRUE if auto-center is ok
        }

        /////////////////////////////////////////////////////////////////////////////
        // Gray background support

        #ifndef _AFX_NO_GRAYDLG_SUPPORT
        HBRUSH CDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
        {
        // use helper in CWnd
        return OnGrayCtlColor(pDC, pWnd, nCtlColor);
        }
        #endif //!_AFX_NO_GRAYDLG_SUPPORT

        /////////////////////////////////////////////////////////////////////////////
        // CDialog support for context sensitive help.

        LRESULT CDialog::OnCommandHelp(WPARAM, LPARAM lParam)
        {
        if (lParam == 0 && m_nIDHelp != 0)
        lParam = HID_BASE_RESOURCE + m_nIDHelp;
        if (lParam != 0)
        {
        CWinApp* pApp = AfxGetApp();
        if (pApp != NULL)
        pApp->WinHelp(lParam);
        return TRUE;
        }
        return FALSE;
        }

        LRESULT CDialog::OnHelpHitTest(WPARAM, LPARAM)
        {
        if (m_nIDHelp != 0)
        return HID_BASE_RESOURCE + m_nIDHelp;
        return 0;
        }

        /////////////////////////////////////////////////////////////////////////////
        // CDialog Diagnostics

        #ifdef _DEBUG
        void CDialog::AssertValid() const
        {
        CWnd::AssertValid();
        }

        void CDialog::Dump(CDumpContext& dc) const
        {
        CWnd::Dump(dc);

        dc << "m_lpszTemplateName = ";
        if (HIWORD(m_lpszTemplateName) == 0)
        dc << (int)LOWORD((DWORD)m_lpszTemplateName);
        else
        dc << m_lpszTemplateName;

        dc << "\nm_hDialogTemplate = " << (UINT)m_hDialogTemplate;
        dc << "\nm_lpDialogTemplate = " << (UINT)m_lpDialogTemplate;
        dc << "\nm_pParentWnd = " << (void*)m_pParentWnd;
        dc << "\nm_nIDHelp = " << m_nIDHelp;

        dc << "\n";
        }

        // diagnostic routine to check for and decode dialog templates
        // return FALSE if a program error occurs (i.e. bad resource ID or
        // bad dialog styles).
        BOOL AFXAPI _AfxCheckDialogTemplate(LPCTSTR lpszResource, BOOL bInvisibleChild)
        {
        ASSERT(lpszResource != NULL);
        HINSTANCE hInst = AfxFindResourceHandle(lpszResource, RT_DIALOG);
        HRSRC hResource = ::FindResource(hInst, lpszResource, RT_DIALOG);
        if (hResource == NULL)
        {
        if (HIWORD(lpszResource) != 0)
        TRACE1("ERROR: Cannot find dialog template named '%s'.\n",
        lpszResource);
        else
        TRACE1("ERROR: Cannot find dialog template with IDD 0x%04X.\n",
        LOWORD((DWORD)lpszResource));
        return FALSE;
        }

        if (!bInvisibleChild)
        return TRUE; // that's all we need to check

        // we must check that the dialog template is for an invisible child
        // window that can be used for a form-view or dialog-bar
        HGLOBAL hTemplate = LoadResource(hInst, hResource);
        if (hTemplate == NULL)
        {
        TRACE0("Warning: LoadResource failed for dialog template.\n");
        // this is only a warning, the real call to CreateDialog will fail
        return TRUE; // not a program error - just out of memory
        }
        DLGTEMPLATEEX* pTemplate = (DLGTEMPLATEEX*)LockResource(hTemplate);
        DWORD dwStyle;
        if (pTemplate->signature == 0xFFFF)
        dwStyle = pTemplate->style;
        else
        dwStyle = ((DLGTEMPLATE*)pTemplate)->style;
        UnlockResource(hTemplate);
        FreeResource(hTemplate);

        if (dwStyle & WS_VISIBLE)
        {
        if (HIWORD(lpszResource) != 0)
        TRACE1("ERROR: Dialog named '%s' must be invisible.\n",
        lpszResource);
        else
        TRACE1("ERROR: Dialog with IDD 0x%04X must be invisible.\n",
        LOWORD((DWORD)lpszResource));
        return FALSE;
        }
        if (!(dwStyle & WS_CHILD))
        {
        if (HIWORD(lpszResource) != 0)
        TRACE1("ERROR: Dialog named '%s' must have the child style.\n",
        lpszResource);
        else
        TRACE1("ERROR: Dialog with IDD 0x%04X must have the child style.\n",
        LOWORD((DWORD)lpszResource));
        return FALSE;
        }

        return TRUE;
        }

        #endif //_DEBUG

        #ifdef AFX_INIT_SEG
        #pragma code_seg(AFX_INIT_SEG)
        #endif

        IMPLEMENT_DYNAMIC(CDialog, CWnd)

        /////////////////////////////////////////////////////////////////////////////
        1. comment ajouter une bibliotheque du microsoft visual studio au programme
          merci
          1. Modérateur
            Aucune idée je n'utilise pas cet IDE. J'imagine qu'il y a un endroit ou tu passes des options au compilateur (si c'est le cas c'est à cet endroit). Essaye avec code::blocks ou dev-cpp (ou passe sous linux), ou cherche dans la doc de visual studio.

            Bonne chance
            1. je fais une interface avec visual C++
              lors de l'execution j'obtient ce message

              Debug Assertion Failed
              File: appcore.cpp
              Line:85

              qu'est ce que signifie ca je veux votre aide svp pour resoudre ce probleme
              1. Modérateur
                Ca signifie que ligne 85 de appcore.cpp, une assertion (un test) n'est pas satisfait. Ceci laisse sous-entendre que le programmeur à estimé que si ce test était invalidé, le comportement de l'application serait imprévisible (ou celle-ci planterait).

                À présent, il te faut regarder ce qui se site à cette endroit du code et réfléchir pourquoi dans ton cas le test est invalide.

                Bonne chance
                1. Modérateur
                  Ben sans le code je ne peux pas te répondre. L'idéal serait que tu lances ton programme avec un debugger en pas à pas et que tu regardes pourquoi l'assertion se déclenche.

                  Bonne chance
                  1. merci
                    j'ai 2 type de erreur de ce type
                    la premiere est dans appcore.cpp line 85 et voila son code
                    #include "stdafx.h"
                    #include <malloc.h>

                    #ifdef AFX_CORE1_SEG
                    #pragma code_seg(AFX_CORE1_SEG)
                    #endif

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

                    AFX_STATIC_DATA const TCHAR _afxFileSection[] = _T("Recent File List");
                    AFX_STATIC_DATA const TCHAR _afxFileEntry[] = _T("File%d");
                    AFX_STATIC_DATA const TCHAR _afxPreviewSection[] = _T("Settings");
                    AFX_STATIC_DATA const TCHAR _afxPreviewEntry[] = _T("PreviewPages");

                    /////////////////////////////////////////////////////////////////////////////
                    // globals (internal library use)

                    // CDocManager statics are in this file for granularity reasons
                    BOOL CDocManager::bStaticInit = TRUE;
                    CDocManager* CDocManager::pStaticDocManager = NULL;
                    CPtrList* CDocManager::pStaticList = NULL;

                    BEGIN_MESSAGE_MAP(CWinApp, CCmdTarget)
                    //{{AFX_MSG_MAP(CWinApp)
                    // Global File commands
                    ON_COMMAND(ID_APP_EXIT, OnAppExit)
                    // MRU - most recently used file menu
                    ON_UPDATE_COMMAND_UI(ID_FILE_MRU_FILE1, OnUpdateRecentFileMenu)
                    ON_COMMAND_EX_RANGE(ID_FILE_MRU_FILE1, ID_FILE_MRU_FILE16, OnOpenRecentFile)
                    //}}AFX_MSG_MAP
                    END_MESSAGE_MAP()

                    /////////////////////////////////////////////////////////////////////////////
                    // _AFX_WIN_STATE implementation

                    #ifndef _AFX_NO_GRAYDLG_SUPPORT

                    #ifdef AFX_INIT_SEG
                    #pragma code_seg(AFX_INIT_SEG)
                    #endif

                    _AFX_WIN_STATE::_AFX_WIN_STATE()
                    {
                    // Note: it is only necessary to intialize non-zero data.
                    }

                    #ifdef AFX_TERM_SEG
                    #pragma code_seg(AFX_TERM_SEG)
                    #endif

                    _AFX_WIN_STATE::~_AFX_WIN_STATE()
                    {
                    AfxDeleteObject((HGDIOBJ*)&m_hDlgBkBrush);
                    }

                    #endif //!_AFX_NO_GRAYDLG_SUPPORT

                    #ifdef AFX_INIT_SEG
                    #pragma code_seg(AFX_INIT_SEG)
                    #endif

                    CWinApp::CWinApp(LPCTSTR lpszAppName)
                    {
                    if (lpszAppName != NULL)
                    m_pszAppName = _tcsdup(lpszAppName);
                    else
                    m_pszAppName = NULL;

                    // initialize CWinThread state
                    AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE();
                    AFX_MODULE_THREAD_STATE* pThreadState = pModuleState->m_thread;
                    ASSERT(AfxGetThread() == NULL);
                    pThreadState->m_pCurrentWinThread = this;
                    ASSERT(AfxGetThread() == this);
                    m_hThread = ::GetCurrentThread();
                    m_nThreadID = ::GetCurrentThreadId();

                    // initialize CWinApp state
                    ASSERT(afxCurrentWinApp == NULL); // only one CWinApp object please
                    pModuleState->m_pCurrentWinApp = this;
                    ASSERT(AfxGetApp() == this);

                    // in non-running state until WinMain
                    m_hInstance = NULL;
                    m_pszHelpFilePath = NULL;
                    m_pszProfileName = NULL;
                    m_pszRegistryKey = NULL;
                    m_pszExeName = NULL;
                    m_pRecentFileList = NULL;
                    m_pDocManager = NULL;
                    m_atomApp = m_atomSystemTopic = NULL;
                    m_lpCmdLine = NULL;
                    m_pCmdInfo = NULL;

                    // initialize wait cursor state
                    m_nWaitCursorCount = 0;
                    m_hcurWaitCursorRestore = NULL;

                    // initialize current printer state
                    m_hDevMode = NULL;
                    m_hDevNames = NULL;
                    m_nNumPreviewPages = 0; // not specified (defaults to 1)

                    // initialize DAO state
                    m_lpfnDaoTerm = NULL; // will be set if AfxDaoInit called

                    // other initialization
                    m_bHelpMode = FALSE;
                    m_nSafetyPoolSize = 512; // default size
                    }

                    BOOL CWinApp::InitApplication()
                    {
                    if (CDocManager::pStaticDocManager != NULL)
                    {
                    if (m_pDocManager == NULL)
                    m_pDocManager = CDocManager::pStaticDocManager;
                    CDocManager::pStaticDocManager = NULL;
                    }

                    if (m_pDocManager != NULL)
                    m_pDocManager->AddDocTemplate(NULL);
                    else
                    CDocManager::bStaticInit = FALSE;

                    return TRUE;
                    }

                    BOOL CWinApp::InitInstance()
                    {
                    return TRUE;
                    }

                    void CWinApp::LoadStdProfileSettings(UINT nMaxMRU)
                    {
                    ASSERT_VALID(this);
                    ASSERT(m_pRecentFileList == NULL);

                    if (nMaxMRU != 0)
                    {
                    // create file MRU since nMaxMRU not zero
                    m_pRecentFileList = new CRecentFileList(0, _afxFileSection, _afxFileEntry,
                    nMaxMRU);
                    m_pRecentFileList->ReadList();
                    }
                    // 0 by default means not set
                    m_nNumPreviewPages = GetProfileInt(_afxPreviewSection, _afxPreviewEntry, 0);
                    }

                    void CWinApp::ParseCommandLine(CCommandLineInfo& rCmdInfo)
                    {
                    for (int i = 1; i < __argc; i++)
                    {
                    LPCTSTR pszParam = __targv[i];
                    BOOL bFlag = FALSE;
                    BOOL bLast = ((i + 1) == __argc);
                    if (pszParam[0] == '-' || pszParam[0] == '/')
                    {
                    // remove flag specifier
                    bFlag = TRUE;
                    ++pszParam;
                    }
                    rCmdInfo.ParseParam(pszParam, bFlag, bLast);
                    }
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // CCommandLineInfo implementation

                    CCommandLineInfo::CCommandLineInfo()
                    {
                    m_bShowSplash = TRUE;
                    m_bRunEmbedded = FALSE;
                    m_bRunAutomated = FALSE;
                    m_nShellCommand = FileNew;
                    }

                    CCommandLineInfo::~CCommandLineInfo()
                    {
                    }

                    void CCommandLineInfo::ParseParam(const TCHAR* pszParam,BOOL bFlag,BOOL bLast)
                    {
                    if (bFlag)
                    {
                    USES_CONVERSION;
                    ParseParamFlag(T2CA(pszParam));
                    }
                    else
                    ParseParamNotFlag(pszParam);

                    ParseLast(bLast);
                    }

                    #ifdef UNICODE
                    void CCommandLineInfo::ParseParam(const char* pszParam, BOOL bFlag, BOOL bLast)
                    {
                    if (bFlag)
                    ParseParamFlag(pszParam);
                    else
                    ParseParamNotFlag(pszParam);

                    ParseLast(bLast);
                    }
                    #endif // UNICODE

                    void CCommandLineInfo::ParseParamFlag(const char* pszParam)
                    {
                    // OLE command switches are case insensitive, while
                    // shell command switches are case sensitive

                    if (lstrcmpA(pszParam, "pt") == 0)
                    m_nShellCommand = FilePrintTo;
                    else if (lstrcmpA(pszParam, "p") == 0)
                    m_nShellCommand = FilePrint;
                    else if (lstrcmpiA(pszParam, "Unregister") == 0 ||
                    lstrcmpiA(pszParam, "Unregserver") == 0)
                    m_nShellCommand = AppUnregister;
                    else if (lstrcmpA(pszParam, "dde") == 0)
                    {
                    AfxOleSetUserCtrl(FALSE);
                    m_nShellCommand = FileDDE;
                    }
                    else if (lstrcmpiA(pszParam, "Embedding") == 0)
                    {
                    AfxOleSetUserCtrl(FALSE);
                    m_bRunEmbedded = TRUE;
                    m_bShowSplash = FALSE;
                    }
                    else if (lstrcmpiA(pszParam, "Automation") == 0)
                    {
                    AfxOleSetUserCtrl(FALSE);
                    m_bRunAutomated = TRUE;
                    m_bShowSplash = FALSE;
                    }
                    }

                    void CCommandLineInfo::ParseParamNotFlag(const TCHAR* pszParam)
                    {
                    if (m_strFileName.IsEmpty())
                    m_strFileName = pszParam;
                    else if (m_nShellCommand == FilePrintTo && m_strPrinterName.IsEmpty())
                    m_strPrinterName = pszParam;
                    else if (m_nShellCommand == FilePrintTo && m_strDriverName.IsEmpty())
                    m_strDriverName = pszParam;
                    else if (m_nShellCommand == FilePrintTo && m_strPortName.IsEmpty())
                    m_strPortName = pszParam;
                    }

                    #ifdef UNICODE
                    void CCommandLineInfo::ParseParamNotFlag(const char* pszParam)
                    {
                    if (m_strFileName.IsEmpty())
                    m_strFileName = pszParam;
                    else if (m_nShellCommand == FilePrintTo && m_strPrinterName.IsEmpty())
                    m_strPrinterName = pszParam;
                    else if (m_nShellCommand == FilePrintTo && m_strDriverName.IsEmpty())
                    m_strDriverName = pszParam;
                    else if (m_nShellCommand == FilePrintTo && m_strPortName.IsEmpty())
                    m_strPortName = pszParam;
                    }
                    #endif

                    void CCommandLineInfo::ParseLast(BOOL bLast)
                    {
                    if (bLast)
                    {
                    if (m_nShellCommand == FileNew && !m_strFileName.IsEmpty())
                    m_nShellCommand = FileOpen;
                    m_bShowSplash = !m_bRunEmbedded && !m_bRunAutomated;
                    }
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // App termination

                    CWinApp::~CWinApp()
                    {
                    // free doc manager
                    if (m_pDocManager != NULL)
                    delete m_pDocManager;

                    // free recent file list
                    if (m_pRecentFileList != NULL)
                    delete m_pRecentFileList;

                    // free static list of document templates
                    if (!afxContextIsDLL)
                    {
                    if (CDocManager::pStaticList != NULL)
                    {
                    delete CDocManager::pStaticList;
                    CDocManager::pStaticList = NULL;
                    }
                    if (CDocManager::pStaticDocManager != NULL)
                    {
                    delete CDocManager::pStaticDocManager;
                    CDocManager::pStaticDocManager = NULL;
                    }
                    }

                    // free printer info
                    if (m_hDevMode != NULL)
                    AfxGlobalFree(m_hDevMode);
                    if (m_hDevNames != NULL)
                    AfxGlobalFree(m_hDevNames);

                    // free atoms if used
                    if (m_atomApp != NULL)
                    ::GlobalDeleteAtom(m_atomApp);
                    if (m_atomSystemTopic != NULL)
                    ::GlobalDeleteAtom(m_atomSystemTopic);

                    // free cached commandline
                    if (m_pCmdInfo != NULL)
                    delete m_pCmdInfo;

                    // cleanup module state
                    AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE();
                    if (pModuleState->m_lpszCurrentAppName == m_pszAppName)
                    pModuleState->m_lpszCurrentAppName = NULL;
                    if (pModuleState->m_pCurrentWinApp == this)
                    pModuleState->m_pCurrentWinApp = NULL;

                    // free various strings allocated with _tcsdup
                    free((void*)m_pszAppName);
                    free((void*)m_pszRegistryKey);
                    free((void*)m_pszExeName);
                    free((void*)m_pszHelpFilePath);
                    free((void*)m_pszProfileName);

                    // avoid calling CloseHandle() on our own thread handle
                    // during the CWinThread destructor
                    m_hThread = NULL;
                    }

                    void CWinApp::SaveStdProfileSettings()
                    {
                    ASSERT_VALID(this);

                    if (m_pRecentFileList != NULL)
                    m_pRecentFileList->WriteList();

                    if (m_nNumPreviewPages != 0)
                    WriteProfileInt(_afxPreviewSection, _afxPreviewEntry, m_nNumPreviewPages);
                    }

                    int CWinApp::ExitInstance()
                    {
                    // if we remember that we're unregistering,
                    // don't save our profile settings

                    if (m_pCmdInfo == NULL ||
                    m_pCmdInfo->m_nShellCommand != CCommandLineInfo::AppUnregister)
                    {
                    if (!afxContextIsDLL)
                    SaveStdProfileSettings();
                    }

                    // Cleanup DAO if necessary
                    if (m_lpfnDaoTerm != NULL)
                    {
                    // If a DLL, YOU must call AfxDaoTerm prior to ExitInstance
                    ASSERT(!afxContextIsDLL);
                    (*m_lpfnDaoTerm)();
                    }

                    return m_msgCur.wParam; // returns the value from PostQuitMessage
                    }

                    /////////////////////////////////////////////////////////////////////////////

                    #ifdef AFX_CORE1_SEG
                    #pragma code_seg(AFX_CORE1_SEG)
                    #endif

                    // Main running routine until application exits
                    int CWinApp::Run()
                    {
                    if (m_pMainWnd == NULL && AfxOleGetUserCtrl())
                    {
                    // Not launched /Embedding or /Automation, but has no main window!
                    TRACE0("Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.\n");
                    AfxPostQuitMessage(0);
                    }
                    return CWinThread::Run();
                    }

                    #ifdef AFX_TERM_SEG
                    #pragma code_seg(AFX_TERM_SEG)
                    #endif

                    void AFXAPI AfxPostQuitMessage(int nExitCode)
                    {
                    // cleanup OLE libraries
                    CWinThread* pThread = AfxGetThread();
                    if (pThread != NULL && pThread->m_lpfnOleTermOrFreeLib != NULL)
                    (*pThread->m_lpfnOleTermOrFreeLib)(TRUE, TRUE);

                    ::PostQuitMessage(nExitCode);
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // WinHelp Helper

                    #ifdef AFX_CORE1_SEG
                    #pragma code_seg(AFX_CORE1_SEG)
                    #endif

                    void CWinApp::WinHelp(DWORD dwData, UINT nCmd)
                    {
                    CWnd* pMainWnd = AfxGetMainWnd();
                    ASSERT_VALID(pMainWnd);

                    // return global app help mode state to FALSE (backward compatibility)
                    m_bHelpMode = FALSE;
                    pMainWnd->PostMessage(WM_KICKIDLE); // trigger idle update

                    pMainWnd->WinHelp(dwData, nCmd);
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // Special exception handling

                    LRESULT CWinApp::ProcessWndProcException(CException* e, const MSG* pMsg)
                    {
                    // handle certain messages in CWinThread
                    switch (pMsg->message)
                    {
                    case WM_CREATE:
                    case WM_PAINT:
                    return CWinThread::ProcessWndProcException(e, pMsg);
                    }

                    // handle all the rest
                    UINT nIDP = AFX_IDP_INTERNAL_FAILURE; // generic message string
                    LRESULT lResult = 0; // sensible default
                    if (pMsg->message == WM_COMMAND)
                    {
                    if ((HWND)pMsg->lParam == NULL)
                    nIDP = AFX_IDP_COMMAND_FAILURE; // command (not from a control)
                    lResult = (LRESULT)TRUE; // pretend the command was handled
                    }
                    if (e->IsKindOf(RUNTIME_CLASS(CMemoryException)))
                    {
                    e->ReportError(MB_ICONEXCLAMATION|MB_SYSTEMMODAL, nIDP);
                    }
                    else if (!e->IsKindOf(RUNTIME_CLASS(CUserException)))
                    {
                    // user has not been alerted yet of this catastrophic problem
                    e->ReportError(MB_ICONSTOP, nIDP);
                    }
                    return lResult; // sensible default return from most WndProc functions
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // CWinApp idle processing

                    BOOL CWinApp::OnIdle(LONG lCount)
                    {
                    if (lCount <= 0)
                    {
                    CWinThread::OnIdle(lCount);

                    // call doc-template idle hook
                    POSITION pos = NULL;
                    if (m_pDocManager != NULL)
                    pos = m_pDocManager->GetFirstDocTemplatePosition();

                    while (pos != NULL)
                    {
                    CDocTemplate* pTemplate = m_pDocManager->GetNextDocTemplate(pos);
                    ASSERT_KINDOF(CDocTemplate, pTemplate);
                    pTemplate->OnIdle();
                    }
                    }
                    else if (lCount == 1)
                    {
                    VERIFY(!CWinThread::OnIdle(lCount));
                    }
                    return lCount < 1; // more to do if lCount < 1
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // CWinApp idle processing

                    void CWinApp::DevModeChange(LPTSTR lpDeviceName)
                    {
                    if (m_hDevNames == NULL)
                    return;

                    LPDEVNAMES lpDevNames = (LPDEVNAMES)::GlobalLock(m_hDevNames);
                    ASSERT(lpDevNames != NULL);
                    if (lstrcmp((LPCTSTR)lpDevNames + lpDevNames->wDeviceOffset,
                    lpDeviceName) == 0)
                    {
                    HANDLE hPrinter;
                    if (!OpenPrinter(lpDeviceName, &hPrinter, NULL))
                    return;

                    // DEVMODE changed for the current printer
                    if (m_hDevMode != NULL)
                    AfxGlobalFree(m_hDevMode);

                    // A zero for last param returns the size of buffer needed.
                    int nSize = DocumentProperties(NULL, hPrinter, lpDeviceName,
                    NULL, NULL, 0);
                    ASSERT(nSize >= 0);
                    m_hDevMode = GlobalAlloc(GHND, nSize);
                    LPDEVMODE lpDevMode = (LPDEVMODE)GlobalLock(m_hDevMode);

                    // Fill in the rest of the structure.
                    if (DocumentProperties(NULL, hPrinter, lpDeviceName, lpDevMode,
                    NULL, DM_OUT_BUFFER) != IDOK)
                    {
                    AfxGlobalFree(m_hDevMode);
                    m_hDevMode = NULL;
                    }
                    ClosePrinter(hPrinter);
                    }
                    }

                    ///////////////////////////////////////////////////////////////////////////
                    // CWinApp diagnostics

                    #ifdef _DEBUG
                    void CWinApp::AssertValid() const
                    {
                    CWinThread::AssertValid();

                    ASSERT(afxCurrentWinApp == this);
                    ASSERT(afxCurrentInstanceHandle == m_hInstance);

                    if (AfxGetThread() != (CWinThread*)this)
                    return; // only do subset if called from different thread

                    if (m_pDocManager != NULL)
                    ASSERT_VALID(m_pDocManager);
                    }

                    void CWinApp::Dump(CDumpContext& dc) const
                    {
                    CWinThread::Dump(dc);

                    dc << "m_hInstance = " << (UINT)m_hInstance;
                    dc << "\nm_hPrevInstance = " << (UINT)m_hPrevInstance;
                    dc << "\nm_lpCmdLine = " << m_lpCmdLine;
                    dc << "\nm_nCmdShow = " << m_nCmdShow;
                    dc << "\nm_pszAppName = " << m_pszAppName;
                    dc << "\nm_bHelpMode = " << m_bHelpMode;
                    dc << "\nm_pszExeName = " << m_pszExeName;
                    dc << "\nm_pszHelpFilePath = " << m_pszHelpFilePath;
                    dc << "\nm_pszProfileName = " << m_pszProfileName;
                    dc << "\nm_hDevMode = " << (UINT)m_hDevMode;
                    dc << "\nm_hDevNames = " << (UINT)m_hDevNames;
                    dc << "\nm_dwPromptContext = " << m_dwPromptContext;

                    if (m_pRecentFileList != NULL)
                    {
                    dc << "\nm_strRecentFiles[] = ";
                    int nSize = m_pRecentFileList->GetSize();
                    for (int i = 0; i < nSize; i++)
                    {
                    if ((*m_pRecentFileList)[i].GetLength() != 0)
                    dc << "\n\tFile: " << (*m_pRecentFileList)[i];
                    }
                    }

                    if (m_pDocManager != NULL)
                    m_pDocManager->Dump(dc);

                    dc << "\nm_nWaitCursorCount = " << m_nWaitCursorCount;
                    dc << "\nm_hcurWaitCursorRestore = " << (UINT)m_hcurWaitCursorRestore;
                    dc << "\nm_nNumPreviewPages = " << m_nNumPreviewPages;

                    dc << "\nm_msgCur = {";
                    dc << "\n\thwnd = " << (UINT)m_msgCur.hwnd;
                    dc << "\n\tmessage = " << (UINT)m_msgCur.message;
                    dc << "\n\twParam = " << (UINT)m_msgCur.wParam;
                    dc << "\n\tlParam = " << (void*)m_msgCur.lParam;
                    dc << "\n\ttime = " << m_msgCur.time;
                    dc << "\n\tpt = " << CPoint(m_msgCur.pt);
                    dc << "\n}";

                    dc << "\n";
                    }
                    #endif

                    #ifdef AFX_INIT_SEG
                    #pragma code_seg(AFX_INIT_SEG)
                    #endif

                    IMPLEMENT_DYNAMIC(CWinApp, CWinThread)

                    #pragma warning(disable: 4074)
                    #pragma init_seg(lib)

                    PROCESS_LOCAL(_AFX_WIN_STATE, _afxWinState)

                    /////////////////////////////////////////////////////////////////////////////

                    la deuxieme est dans dlgcore.cpp ligne 494 voici son code
                    #include "stdafx.h"
                    #include "occimpl.h"

                    #ifdef AFX_CORE1_SEG
                    #pragma code_seg(AFX_CORE1_SEG)
                    #endif

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

                    #define new DEBUG_NEW

                    /////////////////////////////////////////////////////////////////////////////
                    // AfxDlgProc - does nothing since all messages are handled via AfxWndProc

                    BOOL CALLBACK AfxDlgProc(HWND hWnd, UINT message, WPARAM, LPARAM)
                    {
                    if (message == WM_INITDIALOG)
                    {
                    // special case for WM_INITDIALOG
                    CDialog* pDlg = DYNAMIC_DOWNCAST(CDialog, CWnd::FromHandlePermanent(hWnd));
                    if (pDlg != NULL)
                    return pDlg->OnInitDialog();
                    else
                    return 1;
                    }
                    return 0;
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // CDialog - Modeless and Modal

                    BEGIN_MESSAGE_MAP(CDialog, CWnd)
                    #ifndef _AFX_NO_GRAYDLG_SUPPORT
                    ON_WM_CTLCOLOR()
                    #endif
                    //{{AFX_MSG_MAP(CDialog)
                    ////ON_COMMAND(IDOK, OnOK)
                    //ON_COMMAND(IDCANCEL, OnCancel)
                    //ON_MESSAGE(WM_COMMANDHELP, OnCommandHelp)
                    //ON_MESSAGE(WM_HELPHITTEST, OnHelpHitTest)
                    ON_MESSAGE(WM_INITDIALOG, HandleInitDialog)
                    ON_MESSAGE(WM_SETFONT, HandleSetFont)
                    //}}AFX_MSG_MAP
                    #ifndef _AFX_NO_CTL3D_SUPPORT
                    // ON_MESSAGE(WM_QUERY3DCONTROLS, OnQuery3dControls)
                    #endif
                    END_MESSAGE_MAP()

                    BOOL CDialog::PreTranslateMessage(MSG* pMsg)
                    {
                    // for modeless processing (or modal)
                    ASSERT(m_hWnd != NULL);

                    // allow tooltip messages to be filtered
                    if (CWnd::PreTranslateMessage(pMsg))
                    return TRUE;

                    // don't translate dialog messages when in Shift+F1 help mode
                    CFrameWnd* pFrameWnd = GetTopLevelFrame();
                    if (pFrameWnd != NULL && pFrameWnd->m_bHelpMode)
                    return FALSE;

                    // fix around for VK_ESCAPE in a multiline Edit that is on a Dialog
                    // that doesn't have a cancel or the cancel is disabled.
                    if (pMsg->message == WM_KEYDOWN &&
                    (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_CANCEL) &&
                    (::GetWindowLong(pMsg->hwnd, GWL_STYLE) & ES_MULTILINE) &&
                    _AfxCompareClassName(pMsg->hwnd, _T("Edit")))
                    {
                    HWND hItem = ::GetDlgItem(m_hWnd, IDCANCEL);
                    if (hItem == NULL || ::IsWindowEnabled(hItem))
                    {
                    SendMessage(WM_COMMAND, IDCANCEL, 0);
                    return TRUE;
                    }
                    }
                    // filter both messages to dialog and from children
                    return PreTranslateInput(pMsg);
                    }

                    BOOL CDialog::OnCmdMsg(UINT nID, int nCode, void* pExtra,
                    AFX_CMDHANDLERINFO* pHandlerInfo)
                    {
                    if (CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
                    return TRUE;

                    if ((nCode != CN_COMMAND && nCode != CN_UPDATE_COMMAND_UI) ||
                    !IS_COMMAND_ID(nID) || nID >= 0xf000)
                    {
                    // control notification or non-command button or system command
                    return FALSE; // not routed any further
                    }

                    // if we have an owner window, give it second crack
                    CWnd* pOwner = GetParent();
                    if (pOwner != NULL)
                    {
                    #ifdef _DEBUG
                    if (afxTraceFlags & traceCmdRouting)
                    TRACE1("Routing command id 0x%04X to owner window.\n", nID);
                    #endif
                    ASSERT(pOwner != this);
                    if (pOwner->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
                    return TRUE;
                    }

                    // last crack goes to the current CWinThread object
                    CWinThread* pThread = AfxGetThread();
                    if (pThread != NULL)
                    {
                    #ifdef _DEBUG
                    if (afxTraceFlags & traceCmdRouting)
                    TRACE1("Routing command id 0x%04X to app.\n", nID);
                    #endif
                    if (pThread->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
                    return TRUE;
                    }

                    #ifdef _DEBUG
                    if (afxTraceFlags & traceCmdRouting)
                    {
                    TRACE2("IGNORING command id 0x%04X sent to %hs dialog.\n", nID,
                    GetRuntimeClass()->m_lpszClassName);
                    }
                    #endif
                    return FALSE;
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // Modeless Dialogs have 2-phase construction

                    CDialog::CDialog()
                    {
                    ASSERT(m_hWnd == NULL);
                    AFX_ZERO_INIT_OBJECT(CWnd);
                    }

                    CDialog::~CDialog()
                    {
                    if (m_hWnd != NULL)
                    {
                    TRACE0("Warning: calling DestroyWindow in CDialog::~CDialog --\n");
                    TRACE0("\tOnDestroy or PostNcDestroy in derived class will not be called.\n");
                    DestroyWindow();
                    }
                    }

                    BOOL CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
                    {
                    ASSERT(HIWORD(lpszTemplateName) == 0 ||
                    AfxIsValidString(lpszTemplateName));

                    m_lpszTemplateName = lpszTemplateName; // used for help
                    if (HIWORD(m_lpszTemplateName) == 0 && m_nIDHelp == 0)
                    m_nIDHelp = LOWORD((DWORD)m_lpszTemplateName);

                    #ifdef _DEBUG
                    if (!_AfxCheckDialogTemplate(lpszTemplateName, FALSE))
                    {
                    ASSERT(FALSE); // invalid dialog template name
                    PostNcDestroy(); // cleanup if Create fails too soon
                    return FALSE;
                    }
                    #endif //_DEBUG

                    HINSTANCE hInst = AfxFindResourceHandle(lpszTemplateName, RT_DIALOG);
                    HRSRC hResource = ::FindResource(hInst, lpszTemplateName, RT_DIALOG);
                    HGLOBAL hTemplate = LoadResource(hInst, hResource);
                    BOOL bResult = CreateIndirect(hTemplate, pParentWnd, hInst);
                    FreeResource(hTemplate);

                    return bResult;
                    }

                    // for backward compatibility
                    BOOL CDialog::CreateIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd)
                    {
                    return CreateIndirect(hDialogTemplate, pParentWnd, NULL);
                    }

                    BOOL CDialog::CreateIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd,
                    HINSTANCE hInst)
                    {
                    ASSERT(hDialogTemplate != NULL);

                    LPCDLGTEMPLATE lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);
                    BOOL bResult = CreateIndirect(lpDialogTemplate, pParentWnd, NULL, hInst);
                    UnlockResource(hDialogTemplate);

                    return bResult;
                    }

                    // for backward compatibility
                    BOOL CDialog::CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd,
                    void* lpDialogInit)
                    {
                    return CreateIndirect(lpDialogTemplate, pParentWnd, lpDialogInit, NULL);
                    }

                    BOOL CDialog::CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd,
                    void* lpDialogInit, HINSTANCE hInst)
                    {
                    ASSERT(lpDialogTemplate != NULL);

                    if (pParentWnd == NULL)
                    pParentWnd = AfxGetMainWnd();
                    m_lpDialogInit = lpDialogInit;

                    return CreateDlgIndirect(lpDialogTemplate, pParentWnd, hInst);
                    }

                    BOOL CWnd::CreateDlg(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
                    {
                    // load resource
                    LPCDLGTEMPLATE lpDialogTemplate = NULL;
                    HGLOBAL hDialogTemplate = NULL;
                    HINSTANCE hInst = AfxFindResourceHandle(lpszTemplateName, RT_DIALOG);
                    HRSRC hResource = ::FindResource(hInst, lpszTemplateName, RT_DIALOG);
                    hDialogTemplate = LoadResource(hInst, hResource);
                    if (hDialogTemplate != NULL)
                    lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);
                    ASSERT(lpDialogTemplate != NULL);

                    // create a modeless dialog
                    BOOL bSuccess = CreateDlgIndirect(lpDialogTemplate, pParentWnd, hInst);

                    // free resource
                    UnlockResource(hDialogTemplate);
                    FreeResource(hDialogTemplate);

                    return bSuccess;
                    }

                    // for backward compatibility
                    BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd)
                    {
                    return CreateDlgIndirect(lpDialogTemplate, pParentWnd, NULL);
                    }

                    BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate,
                    CWnd* pParentWnd, HINSTANCE hInst)
                    {
                    ASSERT(lpDialogTemplate != NULL);
                    if (pParentWnd != NULL)
                    ASSERT_VALID(pParentWnd);

                    if (hInst == NULL)
                    hInst = AfxGetInstanceHandle();

                    #ifndef _AFX_NO_OCC_SUPPORT
                    _AFX_OCC_DIALOG_INFO occDialogInfo;
                    COccManager* pOccManager = afxOccManager;
                    #endif

                    HGLOBAL hTemplate = NULL;

                    HWND hWnd = NULL;
                    #ifdef _DEBUG
                    DWORD dwError = 0;
                    #endif

                    TRY
                    {
                    VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTLS_REG));
                    AfxDeferRegisterClass(AFX_WNDCOMMCTLSNEW_REG);

                    #ifndef _AFX_NO_OCC_SUPPORT
                    // separately create OLE controls in the dialog template
                    if (pOccManager != NULL)
                    {
                    if (!SetOccDialogInfo(&occDialogInfo))
                    return FALSE;

                    lpDialogTemplate = pOccManager->PreCreateDialog(&occDialogInfo,
                    lpDialogTemplate);
                    }

                    if (lpDialogTemplate == NULL)
                    return FALSE;
                    #endif //!_AFX_NO_OCC_SUPPORT

                    // If no font specified, set the system font.
                    CString strFace;
                    WORD wSize = 0;
                    BOOL bSetSysFont = !CDialogTemplate::GetFont(lpDialogTemplate, strFace,
                    wSize);

                    // On DBCS systems, also change "MS Sans Serif" or "Helv" to system font.
                    if ((!bSetSysFont) && GetSystemMetrics(SM_DBCSENABLED))
                    {
                    bSetSysFont = (strFace == _T("MS Shell Dlg") ||
                    strFace == _T("MS Sans Serif") || strFace == _T("Helv"));
                    if (bSetSysFont && (wSize == 8))
                    wSize = 0;
                    }

                    if (bSetSysFont)
                    {
                    CDialogTemplate dlgTemp(lpDialogTemplate);
                    dlgTemp.SetSystemFont(wSize);
                    hTemplate = dlgTemp.Detach();
                    }

                    if (hTemplate != NULL)
                    lpDialogTemplate = (DLGTEMPLATE*)GlobalLock(hTemplate);

                    // setup for modal loop and creation
                    m_nModalResult = -1;
                    m_nFlags |= WF_CONTINUEMODAL;

                    // create modeless dialog
                    AfxHookWindowCreate(this);
                    hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
                    pParentWnd->GetSafeHwnd(), AfxDlgProc);
                    #ifdef _DEBUG
                    dwError = ::GetLastError();
                    #endif
                    }
                    CATCH_ALL(e)
                    {
                    DELETE_EXCEPTION(e);
                    m_nModalResult = -1;
                    }
                    END_CATCH_ALL

                    #ifndef _AFX_NO_OCC_SUPPORT
                    if (pOccManager != NULL)
                    {
                    pOccManager->PostCreateDialog(&occDialogInfo);
                    if (hWnd != NULL)
                    SetOccDialogInfo(NULL);
                    }
                    #endif //!_AFX_NO_OCC_SUPPORT

                    if (!AfxUnhookWindowCreate())
                    PostNcDestroy(); // cleanup if Create fails too soon

                    // handle EndDialog calls during OnInitDialog
                    if (hWnd != NULL && !(m_nFlags & WF_CONTINUEMODAL))
                    {
                    ::DestroyWindow(hWnd);
                    hWnd = NULL;
                    }

                    if (hTemplate != NULL)
                    {
                    GlobalUnlock(hTemplate);
                    GlobalFree(hTemplate);
                    }

                    // help with error diagnosis (only if WM_INITDIALOG didn't EndDialog())
                    if (hWnd == NULL && (m_nFlags & WF_CONTINUEMODAL))
                    {
                    #ifdef _DEBUG
                    #ifndef _AFX_NO_OCC_SUPPORT
                    if (afxOccManager == NULL)
                    {
                    TRACE0(">>> If this dialog has OLE controls:\n");
                    TRACE0(">>> AfxEnableControlContainer has not been called yet.\n");
                    TRACE0(">>> You should call it in your app's InitInstance function.\n");
                    }
                    else if (dwError != 0)
                    {
                    TRACE1("Warning: Dialog creation failed! GetLastError returns 0x%8.8X\n", dwError);
                    }
                    #endif //!_AFX_NO_OCC_SUPPORT
                    #endif //_DEBUG
                    return FALSE;
                    }

                    ASSERT(hWnd == m_hWnd);
                    return TRUE;
                    }

                    #ifndef _AFX_NO_OCC_SUPPORT

                    BOOL CDialog::SetOccDialogInfo(_AFX_OCC_DIALOG_INFO* pOccDialogInfo)
                    {
                    m_pOccDialogInfo = pOccDialogInfo;
                    return TRUE;
                    }

                    #endif

                    /////////////////////////////////////////////////////////////////////////////
                    // Modal Dialogs

                    // Modal Constructors just save parameters
                    CDialog::CDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
                    {
                    ASSERT(HIWORD(lpszTemplateName) == 0 ||
                    AfxIsValidString(lpszTemplateName));

                    AFX_ZERO_INIT_OBJECT(CWnd);

                    m_pParentWnd = pParentWnd;
                    m_lpszTemplateName = lpszTemplateName;
                    if (HIWORD(m_lpszTemplateName) == 0)
                    m_nIDHelp = LOWORD((DWORD)m_lpszTemplateName);
                    }

                    CDialog::CDialog(UINT nIDTemplate, CWnd* pParentWnd)
                    {
                    AFX_ZERO_INIT_OBJECT(CWnd);

                    m_pParentWnd = pParentWnd;
                    m_lpszTemplateName = MAKEINTRESOURCE(nIDTemplate);
                    m_nIDHelp = nIDTemplate;
                    }

                    BOOL CDialog::InitModalIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd)
                    {
                    // must be called on an empty constructed CDialog
                    ASSERT(m_lpszTemplateName == NULL);
                    ASSERT(m_hDialogTemplate == NULL);
                    ASSERT(hDialogTemplate != NULL);

                    if (m_pParentWnd == NULL)
                    m_pParentWnd = pParentWnd;

                    m_hDialogTemplate = hDialogTemplate;

                    return TRUE; // always ok (DoModal actually brings up dialog)
                    }

                    BOOL CDialog::InitModalIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd,
                    void* lpDialogInit)
                    {
                    // must be called on an empty constructed CDialog
                    ASSERT(m_lpszTemplateName == NULL);
                    ASSERT(m_lpDialogTemplate == NULL);
                    ASSERT(lpDialogTemplate != NULL);

                    if (m_pParentWnd == NULL)
                    m_pParentWnd = pParentWnd;

                    m_lpDialogTemplate = lpDialogTemplate;
                    m_lpDialogInit = lpDialogInit;

                    return TRUE; // always ok (DoModal actually brings up dialog)
                    }

                    HWND CDialog::PreModal()
                    {
                    // cannot call DoModal on a dialog already constructed as modeless
                    ASSERT(m_hWnd == NULL);

                    // allow OLE servers to disable themselves
                    CWinApp* pApp = AfxGetApp();
                    if (pApp != NULL)
                    pApp->EnableModeless(FALSE);

                    // find parent HWND
                    HWND hWnd = CWnd::GetSafeOwner_(m_pParentWnd->GetSafeHwnd(), &m_hWndTop);

                    // hook for creation of dialog
                    AfxHookWindowCreate(this);

                    // return window to use as parent for dialog
                    return hWnd;
                    }

                    void CDialog::PostModal()
                    {
                    AfxUnhookWindowCreate(); // just in case
                    Detach(); // just in case

                    // re-enable windows
                    if (::IsWindow(m_hWndTop))
                    ::EnableWindow(m_hWndTop, TRUE);
                    m_hWndTop = NULL;
                    CWinApp* pApp = AfxGetApp();
                    if (pApp != NULL)
                    pApp->EnableModeless(TRUE);
                    }

                    int CDialog::DoModal()
                    {
                    // can be constructed with a resource template or InitModalIndirect
                    ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
                    m_lpDialogTemplate != NULL);

                    // load resource as necessary
                    LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
                    HGLOBAL hDialogTemplate = m_hDialogTemplate;
                    HINSTANCE hInst = AfxGetResourceHandle();
                    if (m_lpszTemplateName != NULL)
                    {
                    hInst = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
                    HRSRC hResource = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
                    hDialogTemplate = LoadResource(hInst, hResource);
                    }
                    if (hDialogTemplate != NULL)
                    lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);

                    // return -1 in case of failure to load the dialog template resource
                    if (lpDialogTemplate == NULL)
                    return -1;

                    // disable parent (before creating dialog)
                    HWND hWndParent = PreModal();
                    AfxUnhookWindowCreate();
                    BOOL bEnableParent = FALSE;
                    if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))
                    {
                    ::EnableWindow(hWndParent, FALSE);
                    bEnableParent = TRUE;
                    }

                    TRY
                    {
                    // create modeless dialog
                    AfxHookWindowCreate(this);
                    if (CreateDlgIndirect(lpDialogTemplate,
                    CWnd::FromHandle(hWndParent), hInst))
                    {
                    if (m_nFlags & WF_CONTINUEMODAL)
                    {
                    // enter modal loop
                    DWORD dwFlags = MLF_SHOWONIDLE;
                    if (GetStyle() & DS_NOIDLEMSG)
                    dwFlags |= MLF_NOIDLEMSG;
                    VERIFY(RunModalLoop(dwFlags) == m_nModalResult);
                    }

                    // hide the window before enabling the parent, etc.
                    if (m_hWnd != NULL)
                    SetWindowPos(NULL, 0, 0, 0, 0, SWP_HIDEWINDOW|
                    SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
                    }
                    }
                    CATCH_ALL(e)
                    {
                    DELETE_EXCEPTION(e);
                    m_nModalResult = -1;
                    }
                    END_CATCH_ALL

                    if (bEnableParent)
                    ::EnableWindow(hWndParent, TRUE);
                    if (hWndParent != NULL && ::GetActiveWindow() == m_hWnd)
                    ::SetActiveWindow(hWndParent);

                    // destroy modal window
                    DestroyWindow();
                    PostModal();

                    // unlock/free resources as necessary
                    if (m_lpszTemplateName != NULL || m_hDialogTemplate != NULL)
                    UnlockResource(hDialogTemplate);
                    if (m_lpszTemplateName != NULL)
                    FreeResource(hDialogTemplate);

                    return m_nModalResult;
                    }

                    void CDialog::EndDialog(int nResult)
                    {
                    ASSERT(::IsWindow(m_hWnd));

                    if (m_nFlags & (WF_MODALLOOP|WF_CONTINUEMODAL))
                    EndModalLoop(nResult);

                    ::EndDialog(m_hWnd, nResult);
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // Standard CDialog implementation

                    LRESULT CDialog::HandleSetFont(WPARAM wParam, LPARAM)
                    {
                    OnSetFont(CFont::FromHandle((HFONT)wParam));
                    return Default();
                    }

                    void CDialog::PreInitDialog()
                    {
                    // ignore it
                    }

                    LRESULT CDialog::HandleInitDialog(WPARAM, LPARAM)
                    {
                    PreInitDialog();

                    #ifndef _AFX_NO_OCC_SUPPORT
                    // create OLE controls
                    COccManager* pOccManager = afxOccManager;
                    if ((pOccManager != NULL) && (m_pOccDialogInfo != NULL))
                    {
                    BOOL bDlgInit;
                    if (m_lpDialogInit != NULL)
                    bDlgInit = pOccManager->CreateDlgControls(this, m_lpDialogInit,
                    m_pOccDialogInfo);
                    else
                    bDlgInit = pOccManager->CreateDlgControls(this, m_lpszTemplateName,
                    m_pOccDialogInfo);

                    if (!bDlgInit)
                    {
                    TRACE0("Warning: CreateDlgControls failed during dialog init.\n");
                    EndDialog(-1);
                    return FALSE;
                    }
                    }
                    #endif

                    // Default will call the dialog proc, and thus OnInitDialog
                    BOOL bResult = Default();

                    #ifndef _AFX_NO_OCC_SUPPORT
                    if (bResult && (m_nFlags & WF_OLECTLCONTAINER))
                    {
                    CWnd* pWndNext = GetNextDlgTabItem(NULL);
                    if (pWndNext != NULL)
                    {
                    pWndNext->SetFocus(); // UI Activate OLE control
                    bResult = FALSE;
                    }
                    }
                    #endif

                    return bResult;
                    }

                    BOOL AFXAPI AfxHelpEnabled()
                    {
                    if (AfxGetApp() == NULL)
                    return FALSE;

                    // help is enabled if the app has a handler for ID_HELP
                    AFX_CMDHANDLERINFO info;

                    // check main window first
                    CWnd* pWnd = AfxGetMainWnd();
                    if (pWnd != NULL && pWnd->OnCmdMsg(ID_HELP, CN_COMMAND, NULL, &info))
                    return TRUE;

                    // check app last
                    return AfxGetApp()->OnCmdMsg(ID_HELP, CN_COMMAND, NULL, &info);
                    }

                    void CDialog::OnSetFont(CFont*)
                    {
                    // ignore it
                    }

                    BOOL CDialog::OnInitDialog()
                    {
                    // execute dialog RT_DLGINIT resource
                    BOOL bDlgInit;
                    if (m_lpDialogInit != NULL)
                    bDlgInit = ExecuteDlgInit(m_lpDialogInit);
                    else
                    bDlgInit = ExecuteDlgInit(m_lpszTemplateName);

                    if (!bDlgInit)
                    {
                    TRACE0("Warning: ExecuteDlgInit failed during dialog init.\n");
                    EndDialog(-1);
                    return FALSE;
                    }

                    // transfer data into the dialog from member variables
                    if (!UpdateData(FALSE))
                    {
                    TRACE0("Warning: UpdateData failed during dialog init.\n");
                    EndDialog(-1);
                    return FALSE;
                    }

                    // enable/disable help button automatically
                    CWnd* pHelpButton = GetDlgItem(ID_HELP);
                    if (pHelpButton != NULL)
                    pHelpButton->ShowWindow(AfxHelpEnabled() ? SW_SHOW : SW_HIDE);

                    return TRUE; // set focus to first one
                    }

                    void CDialog::OnOK()
                    {
                    if (!UpdateData(TRUE))
                    {
                    TRACE0("UpdateData failed during dialog termination.\n");
                    // the UpdateData routine will set focus to correct item
                    return;
                    }
                    EndDialog(IDOK);
                    }

                    void CDialog::OnCancel()
                    {
                    EndDialog(IDCANCEL);
                    }

                    BOOL CDialog::CheckAutoCenter()
                    {
                    // load resource as necessary
                    LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
                    HGLOBAL hDialogTemplate = m_hDialogTemplate;
                    if (m_lpszTemplateName != NULL)
                    {
                    HINSTANCE hInst = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
                    HRSRC hResource = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
                    hDialogTemplate = LoadResource(hInst, hResource);
                    }
                    if (hDialogTemplate != NULL)
                    lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);

                    // determine if dialog should be centered
                    BOOL bResult = TRUE;

                    if (lpDialogTemplate != NULL)
                    {
                    DWORD dwStyle = lpDialogTemplate->style;
                    short x;
                    short y;

                    if (((DLGTEMPLATEEX*)lpDialogTemplate)->signature == 0xFFFF)
                    {
                    // it's a DIALOGEX resource
                    dwStyle = ((DLGTEMPLATEEX*)lpDialogTemplate)->style;
                    x = ((DLGTEMPLATEEX*)lpDialogTemplate)->x;
                    y = ((DLGTEMPLATEEX*)lpDialogTemplate)->y;
                    }
                    else
                    {
                    // it's a DIALOG resource
                    x = lpDialogTemplate->x;
                    y = lpDialogTemplate->y;
                    }

                    bResult = !(dwStyle & (DS_CENTER|DS_CENTERMOUSE|DS_ABSALIGN)) &&
                    x == 0 && y == 0;
                    }

                    // unlock/free resources as necessary
                    if (m_lpszTemplateName != NULL || m_hDialogTemplate != NULL)
                    UnlockResource(hDialogTemplate);
                    if (m_lpszTemplateName != NULL)
                    FreeResource(hDialogTemplate);

                    return bResult; // TRUE if auto-center is ok
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // Gray background support

                    #ifndef _AFX_NO_GRAYDLG_SUPPORT
                    HBRUSH CDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
                    {
                    // use helper in CWnd
                    return OnGrayCtlColor(pDC, pWnd, nCtlColor);
                    }
                    #endif //!_AFX_NO_GRAYDLG_SUPPORT

                    /////////////////////////////////////////////////////////////////////////////
                    // CDialog support for context sensitive help.

                    LRESULT CDialog::OnCommandHelp(WPARAM, LPARAM lParam)
                    {
                    if (lParam == 0 && m_nIDHelp != 0)
                    lParam = HID_BASE_RESOURCE + m_nIDHelp;
                    if (lParam != 0)
                    {
                    CWinApp* pApp = AfxGetApp();
                    if (pApp != NULL)
                    pApp->WinHelp(lParam);
                    return TRUE;
                    }
                    return FALSE;
                    }

                    LRESULT CDialog::OnHelpHitTest(WPARAM, LPARAM)
                    {
                    if (m_nIDHelp != 0)
                    return HID_BASE_RESOURCE + m_nIDHelp;
                    return 0;
                    }

                    /////////////////////////////////////////////////////////////////////////////
                    // CDialog Diagnostics

                    #ifdef _DEBUG
                    void CDialog::AssertValid() const
                    {
                    CWnd::AssertValid();
                    }

                    void CDialog::Dump(CDumpContext& dc) const
                    {
                    CWnd::Dump(dc);

                    dc << "m_lpszTemplateName = ";
                    if (HIWORD(m_lpszTemplateName) == 0)
                    dc << (int)LOWORD((DWORD)m_lpszTemplateName);
                    else
                    dc << m_lpszTemplateName;

                    dc << "\nm_hDialogTemplate = " << (UINT)m_hDialogTemplate;
                    dc << "\nm_lpDialogTemplate = " << (UINT)m_lpDialogTemplate;
                    dc << "\nm_pParentWnd = " << (void*)m_pParentWnd;
                    dc << "\nm_nIDHelp = " << m_nIDHelp;

                    dc << "\n";
                    }

                    // diagnostic routine to check for and decode dialog templates
                    // return FALSE if a program error occurs (i.e. bad resource ID or
                    // bad dialog styles).
                    BOOL AFXAPI _AfxCheckDialogTemplate(LPCTSTR lpszResource, BOOL bInvisibleChild)
                    {
                    ASSERT(lpszResource != NULL);
                    HINSTANCE hInst = AfxFindResourceHandle(lpszResource, RT_DIALOG);
                    HRSRC hResource = ::FindResource(hInst, lpszResource, RT_DIALOG);
                    if (hResource == NULL)
                    {
                    if (HIWORD(lpszResource) != 0)
                    TRACE1("ERROR: Cannot find dialog template named '%s'.\n",
                    lpszResource);
                    else
                    TRACE1("ERROR: Cannot find dialog template with IDD 0x%04X.\n",
                    LOWORD((DWORD)lpszResource));
                    return FALSE;
                    }

                    if (!bInvisibleChild)
                    return TRUE; // that's all we need to check

                    // we must check that the dialog template is for an invisible child
                    // window that can be used for a form-view or dialog-bar
                    HGLOBAL hTemplate = LoadResource(hInst, hResource);
                    if (hTemplate == NULL)
                    {
                    TRACE0("Warning: LoadResource failed for dialog template.\n");
                    // this is only a warning, the real call to CreateDialog will fail
                    return TRUE; // not a program error - just out of memory
                    }
                    DLGTEMPLATEEX* pTemplate = (DLGTEMPLATEEX*)LockResource(hTemplate);
                    DWORD dwStyle;
                    if (pTemplate->signature == 0xFFFF)
                    dwStyle = pTemplate->style;
                    else
                    dwStyle = ((DLGTEMPLATE*)pTemplate)->style;
                    UnlockResource(hTemplate);
                    FreeResource(hTemplate);

                    if (dwStyle & WS_VISIBLE)
                    {
                    if (HIWORD(lpszResource) != 0)
                    TRACE1("ERROR: Dialog named '%s' must be invisible.\n",
                    lpszResource);
                    else
                    TRACE1("ERROR: Dialog with IDD 0x%04X must be invisible.\n",
                    LOWORD((DWORD)lpszResource));
                    return FALSE;
                    }
                    if (!(dwStyle & WS_CHILD))
                    {
                    if (HIWORD(lpszResource) != 0)
                    TRACE1("ERROR: Dialog named '%s' must have the child style.\n",
                    lpszResource);
                    else
                    TRACE1("ERROR: Dialog with IDD 0x%04X must have the child style.\n",
                    LOWORD((DWORD)lpszResource));
                    return FALSE;
                    }

                    return TRUE;
                    }

                    #endif //_DEBUG

                    #ifdef AFX_INIT_SEG
                    #pragma code_seg(AFX_INIT_SEG)
                    #endif

                    IMPLEMENT_DYNAMIC(CDialog, CWnd)

                    /////////////////////////////////////////////////////////////////////////////

                    merci d'avance
                2. Modérateur
                  Ton erreur est ici :
                  ASSERT(AfxGetApp() == this);

                  Cela signifie que ton objet CWinApp (this dans ce contexte) auquel tu appliques AfxGetApp() ne retourne pas this. C'est probablement parce que tu as mal initialisé cet objet.

                  Bonne chance
                  1. bonjour,
                    je suis debutante en c++ vous pouvez me dire exactement comment je corrige cet erreur.
                    je ne sais pas quoi faire exactement?
                    merci d'avance
                3. Modérateur
                  Aucune idée sincèrement. Il faudrait voir le code de la classe CWinApp et comment tu l'as créée. Vu le nom c'est une classe MFC (microsoft fundation class) et moi je suis sous linux, donc je n'ai pas ce genre de headers.

                  https://www.codeproject.com/script/Forums/View.aspx?fid=1647&msg=1611813

                  Re: How does AfxGetApp() work? member PJ Arends 17:39 4 Aug '06

                  AfxWin1.inl:
                  
                  _AFXWIN_INLINE CWinApp* AFXAPI AfxGetApp()
                  	{ return afxCurrentWinApp; }


                  AfxWin.h:
                  
                  #define afxCurrentWinApp    AfxGetModuleState()->m_pCurrentWinApp
                  
                  
                  AfxGetModuleState() returns a pointer to a MFC internal state structure.
                  

                  AppCore.cpp:
                  
                  CWinApp::CWinApp(LPCTSTR lpszAppName)
                  {
                  ...
                  	// initialize CWinApp state
                  	ASSERT(afxCurrentWinApp == NULL); // only one CWinApp object please
                  	pModuleState->m_pCurrentWinApp = this;
                  	ASSERT(AfxGetApp() == this);
                  
                  ...
                  }
                  

                  So basicly the AfxGetApp() pointer is setup in the CWinApp constructor. If you really want to know the internals of MFC then thge best place to look is in the MFC source files. Using the visual studio debugger to step through the sources is the best way.

                  Comme je te disais tu as dû te planter quelque part au moment d'appeler le constructeur de CWinApp.

                  Bonne chance
                  1. bonjour,
                    j'ai un probleme d'assertion
                    lors de l'excution j'obtient ça:
                    debug assertion failed
                    file: dlgcore.cpp
                    line: 494

                    quand je clic sue recommancer le curseur jaune a la ligne d'ou vient l'erreur
                    ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
                    m_lpDialogTemplate != NULL);line 494
                    je n'est pas pu le corriger
                    svp vous pouvez m'aider je suis débutante en c++
                    merci d'avance
                    1. Modérateur
                      Peu importe l'assertion c'est toujours la même démarche. Il faut que tu regardes le test à la ligne correspondante et pourquoi il est vrai.
                      1. merci pour la reponse mais tu peux m'expliquer comme je te dis je suis debutante en c++
                    2. Modérateur
                      Ben là ton test c'est :
                      m_lpszTemplateName != NULL || m_hDialogTemplate != NULL || m_lpDialogTemplate != NULL

                      Ce test est actuellement faux, ce qui déclenche l'assertion.

                      Ca signifie qu'au moins un de ces trois pointeurs est nul, alors qu'ils devraient tous être initialisés. À présent il faut voir dans ton code à quoi correspondent c'est variable, mais c'est probablement un objet que tu as mal initialisé au moment de le construire.

                      Bonne chance
                      1. salut,
                        j'ai met mon programme en mode release j'obtient le message erreur suivant:
                        Configuration: Monnayeur - Win32 Release--------------------
                        Linking...
                        LINK : fatal error LNK1181: cannot open input file "32.lib"
                        Error executing link.exe.

                        Monnayeur.exe - 1 error(s), 0 warning(s)
                        The following environment variables were not found
                        $(QTDIR)

                        qu'est ce que je dois faire exactement
                        merci d'avance
                        1. Modérateur
                          Aucune idée. Tu serais sous linux (oui désolée je n'ai pas windows) je pourrais t'aider mais là c'est un code 100% windowsien et partiel, comment veux-tu que je puisse le compiler ou t'aider ?

                          Là seule chose que je peux faire c'est te dire ce que signifie l'erreur et ce que le compilateur attend, mais là je ne peux pas te détailler la manière dont le résoudre plus précisément.

                          LINK : fatal error LNK1181: cannot open input file "32.lib"
                          Error executing link.exe.


                          => ça signifie que ton programme utilise une librairie (32.lib, bizarre comme nom) et qu'il ne la trouve pas. Vérifie où se situe ce fichier sur ton PC.

                          Monnayeur.exe - 1 error(s), 0 warning(s)
                          The following environment variables were not found
                          $(QTDIR)


                          Ceci signifie que la variable d'environnement QTDIR (qui dit probablement ou est installé QT) n'est pas initialisé, ce qui va lui poser quelques difficultés pour trouver ses petits. Si ça se trouve ton erreur provient du fait que cette variable n'est pas configurée. Une piste :
                          https://www.developpez.net/forums/d229146/c-cpp/outils-c-cpp/code-blocks/creation-d-projet-qt/

                          Bonne chance
                          1. bonjour;
                            maintenant tout est bien mais il me reste un petit problème c'est que je ne sais pas comment faire la liaison ente l'interface que j'ai fait et ma machine( cable USB)
                            vous pouvez me donner un code qui permet de faire la liaison et svp spécifie ou je dois le met
                            merci d'avance
                        2. Modérateur
                          Ouvre un nouveau sujet dans le forum programmation en expliquant plus clairement à quelle autre application ton programme doit se connecter. A priori ça consiste juste à ouvrir une socket et écrire dedans pour faire communiquer les deux programmes. A noter que des outils comme corba existent pour faire communiquer "simplement" deux applications distantes.

                          Bonne chance
                          1. Modérateur
                            En gros il trouve la déclaration des méthodes de BillValidator (notamment Poll, Reset, GetBillStatus...) mais pas leur implémentation. Ceci signifie que si cet objet est implémenté dans un .o tu oublies de le passer en paramètre à ton compilateur, et s'il est dans une librairie, tu oublies de linker l'exécutable final avec ladite librairie.

                            Je penche pour la seconde explication.

                            Bonne chance
                            1. merci pour la réponse mais s'il vous plait vous pouvez m'exliquer encore
                              merci