Советы по Delphi



         

Вызов Delphi DLL из MS Visual C++ - часть 3


/p>

************ DLLTSTADlg.CPP

// DLLTSTADlg.cpp : файл реализации
//

#include "stdafx.h"
#include "DLLTSTA.h"
#include "DLLTSTADlg.h"

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

extern CDLLTSTAApp theApp;

/////////////////////////////////////////////////////////////////////////////
// Диалог CDLLTSTADlg

CDLLTSTADlg::CDLLTSTADlg(CWnd* pParent /*=NULL*/)
: CDialog(CDLLTSTADlg::IDD, pParent){
//{{AFX_DATA_INIT(CDLLTSTADlg)m_sVal = _T("1");m_sStr = _T("Hello");//}}AFX_DATA_INIT// Имейте в виду, что в Win32 LoadIcon не требует последующего DestroyIconm_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
#ifndef USELIB
hMyDLL = LoadLibrary("C:\\delpwork\\MYDLL.DLL");if(hMyDLL == NULL)PostQuitMessage(1);lpfnplusone = GetProcAddress(HMODULE(hMyDLL), "_plusone");if(lpfnplusone == NULL)PostQuitMessage(2);plusone = pIIFUNC(lpfnplusone);#endif //USELIB

}

CDLLTSTADlg::~CDLLTSTADlg()
{
#ifndef USELIB
if (hMyDLL != NULL)FreeLibrary(hMyDLL);#endif //USELIB
}

void CDLLTSTADlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CDLLTSTADlg)DDX_Text(pDX, IDC_LBLINT, m_sVal);DDX_Text(pDX, IDC_LBLSTRING, m_sStr);//}}AFX_DATA_MAP}

BEGIN_MESSAGE_MAP(CDLLTSTADlg, CDialog)
//{{AFX_MSG_MAP(CDLLTSTADlg)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BTNPLUSONE, OnBtnplusoneClick)ON_BN_CLICKED(IDC_BTNDOSTRING, OnBtndostringClick)//}}AFX_MSG_MAPEND_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Дескрипторы сообщений CDLLTSTADlg

BOOL CDLLTSTADlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Устанавливаем иконку для данного диалога. В случае, когда главное// окно программы не является диалогом, это происходит автоматическиSetIcon(m_hIcon, TRUE); // Устанавливаем большую иконкуSetIcon(m_hIcon, FALSE); // Устанавливаем маленькую иконку
// TODO: Здесь добавляем дополнительную инициализацию
return TRUE; // возвращает TRUE в случае отсутствия фокуса у диалога}

// Если Вы добавляете в диалог кнопку минимизации, для создания иконки Вам
// необходим код, приведенный ниже. Для MFC-приложений используйте
// document/view model для автоматического создания скелета кода.

void CDLLTSTADlg::OnPaint()
{
if (IsIconic()){CPaintDC dc(this); // контекст устройства для рисования
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Центр иконки в области клиентаint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;
// Рисование иконкиdc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}

// Система вызывает данный код для получения курсора, выводимого если
// пользователь пытается перетащить свернутое окно.
HCURSOR CDLLTSTADlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;}

void CDLLTSTADlg::OnBtnplusoneClick()
{
int iTemp;char sTemp[10];

iTemp = atoi(m_sVal);iTemp = plusone(iTemp);m_sVal = itoa(iTemp, sTemp, 10);UpdateData(FALSE);}

void CDLLTSTADlg::OnBtndostringClick()
{
UpdateData(FALSE);
}

[000075]




Содержание  Назад