Советы по Delphi



         

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


/p>

***********MYDLL.DPR

library mydll;

{ Существенное замечание об управлении памятью в DLL: Если DLL экспортирует функции со
строковыми параметрами или возвращающие строковые значения, модуль ShareMem надоуказывать в разделе Uses библиотеки и проекта первым. Это касается любых строк,передаваемых как в DLL, так и из нее, даже если они размещаются внутри записей илиобъектов. Модуль ShareMem служит интерфейсом менеджера разделяемой памятиDELPHIMM.DLL, который должен разворачиваться одновременно с данной DLL. Чтобы избежатьприменения DELPHIMM.DLL, строковую информацию можно передавать с помощью параметровтипа PChar или ShortString. }
uses
SysUtils,Classes,MyDLLMU in 'MyDLLMU.pas';
exports
plusone name 'plusone@4',ChangeString name 'ChangeString@4';
begin
end
.

*************** MYDLL.DEF
; -----------------------------------------------------------------
; Имя файла: MYDLL.DEF
; -----------------------------------------------------------------

LIBRARY MYDLL

DESCRIPTION 'Тестовая Delphi DLL, статическая загрузка в VC++ приложение'

EXPORTS
plusone@4

************** DLLTSTADlg.H

// DLLTSTADlg.h : заголовочный файл
//
#define USELIB
#ifdef USELIB
extern "C" {
int __declspec(dllimport) __stdcall plusone(int);}
#endif //USELIB
/////////////////////////////////////////////////////////////////////////////
// Диалог CDLLTSTADlg

class CDLLTSTADlg : public CDialog
{
// Создание public:
CDLLTSTADlg(CWnd* pParent = NULL); // стандартный конструктор~CDLLTSTADlg();
// Данные диалога
//{{AFX_DATA(CDLLTSTADlg)enum { IDD = IDD_DLLTSTA_DIALOG };CString m_sVal;CString m_sStr;//}}AFX_DATA
// Перекрытая виртуальная функция, сгенерированная ClassWizard//{{AFX_VIRTUAL(CDLLTSTADlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // Поддержка DDX/DDV//}}AFX_VIRTUAL
// Реализация
protected:

#ifndef USELIB
HINSTANCE hMyDLL;FARPROC lpfnplusone;typedef int (*pIIFUNC)(int);pIIFUNC plusone;#endif //USELIB

HICON m_hIcon;
// Карта функций генераций сообщений//{{AFX_MSG(CDLLTSTADlg)virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnBtnplusone();afx_msg void OnBtnplusoneClick();afx_msg void OnBtndostringClick();//}}AFX_MSGDECLARE_MESSAGE_MAP()};
<


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