Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использование C-шной DLL

Delphi , Файловая система , DLL и PlugIns

Использование C-шной DLL

Автор: Xavier Pacheco

unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TMainForm = class(TForm)
    Button1: TButton;
    Button2: TButton;
    FooData: TEdit;
    Button3: TButton;
    Button4: TButton;
    SetCVarData: TEdit;
    GetCVarData: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;
  _GlobalVar: PChar = 'This is a Delphi String';

implementation

uses PasStrng;

{$R *.DFM}

{$L ccode.obj}

type
  TFoo = class
    function Function1(Str1: PChar): integer; virtual; cdecl; abstract;
    function Function2(i: integer): integer; virtual; cdecl; abstract;
  end;

  PCharArray = ^TCharArray;
  TCharArray = array[0..127] of char;

  // import from OBJ file:

function _SAYHELLO(Text: PChar): Integer; cdecl; external;
procedure _C_VAR; external; // trick to import OBJ data

// imports from DLL file:

function ClassFactory: TFoo; cdecl; external 'cdll.dll'
  name '_CLASSFACTORY';

procedure ClassKill(Foo: TFoo); cdecl; external 'cdll.dll'
  name '_CLASSKILL';

procedure TMainForm.Button1Click(Sender: TObject);
begin
  _SayHello('hello world');
end;

procedure TMainForm.Button2Click(Sender: TObject);
var
  Foo: TFoo;
begin
  Foo := ClassFactory;
  Foo.Function1('huh huh, cool.');
  FooData.Text := IntToStr(Foo.Function2(10));
  ClassKill(Foo);
end;

function GetCArray: string;
var
  A: PCharArray;
begin
  A := PCharArray(@_C_VAR);
  Result := A^;
end;

procedure SetCArray(const S: string);
var
  A: PCharArray;
begin
  A := PCharArray(@_C_VAR);
  StrLCopy(A^, PChar(S), SizeOf(TCharArray));
end;

procedure TMainForm.Button3Click(Sender: TObject);
begin
  SetCArray(SetCVarData.Text);
end;

procedure TMainForm.Button4Click(Sender: TObject);
begin
  GetCVarData.Text := GetCArray;
end;

end.
Скачать весь проект

В этом проекте на языке Delphi используется DLL-библиотека с C-стилем для взаимодействия с приложением. В проекте есть несколько компонентов, включая формы, кнопки, текстовые поля и пользовательский класс TFoo, который используется для взаимодействия с DLL.

Основная форма Основная форма имеет четыре кнопки: Button1, Button2, Button3 и Button4. Каждая кнопка выполняет разные действия:

  • Button1 вызывает функцию _SAYHELLO из DLL, которая выводит в консоль строку "hello world".
  • Button2 создает экземпляр класса TFoo с помощью функции ClassFactory из DLL, вызывает два виртуальных метода (Function1 и Function2) на этом объекте и затем уничтожает объект с помощью функции ClassKill из DLL. Результат второго вызова отображается в текстовом поле.
  • Button3 устанавливает значение массива _C_VAR в DLL с помощью процедуры SetCArray.
  • Button4 читает значение этого же массива и отображает его в другом текстовом поле.

Функции DLL Проект использует несколько функций из DLL:

  • _SAYHELLO: выводит строку "hello world" в консоль.
  • ClassFactory: создает экземпляр класса TFoo.
  • ClassKill: уничтожает экземпляр класса TFoo.
  • _C_VAR: переменная в DLL, которая может быть прочитана и изменена с помощью процедур GetCArray и SetCArray.

Пользовательский класс Пользовательский класс TFoo имеет два виртуальных метода:

  • Function1: принимает строку в качестве входного параметра и возвращает целое число. Этот метод вызывается кнопкой Button2.
  • Function2: принимает целое число в качестве входного параметра и возвращает целое число. Этот метод также вызывается кнопкой Button2.

Другие функции Проект включает несколько других функций и процедур, которые взаимодействуют с DLL:

  • _C_VAR: процедура, которая устанавливает значение массива _C_VAR в DLL.
  • GetCArray: читает значение массива _C_VAR из DLL и возвращает его как строку.
  • SetCArray: устанавливает значение массива _C_VAR в новую строку с помощью процедуры _C_VAR.

В целом, этот проект демонстрирует, как взаимодействовать с C-стилем DLL из приложения на языке Delphi.

В статье рассматривается пример использования C-шной DLL в Delphi, где описываются функции и процедуры для работы с динамически связанными библиотеками.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:28:14/0.0056049823760986/1