Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 794

•  TDictionary Custom Sort  5 903

•  Fast Watermark Sources  5 706

•  3D Designer  8 481

•  Sik Screen Capture  6 041

•  Patch Maker  6 485

•  Айболит (remote control)  6 475

•  ListBox Drag & Drop  5 340

•  Доска для игры Реверси  94 962

•  Графические эффекты  6 679

•  Рисование по маске  5 807

•  Перетаскивание изображений  4 864

•  Canvas Drawing  5 241

•  Рисование Луны  4 959

•  Поворот изображения  4 507

•  Рисование стержней  3 189

•  Paint on Shape  2 436

•  Генератор кроссвордов  3 309

•  Головоломка Paletto  2 620

•  Теорема Монжа об окружностях  3 405

•  Пазл Numbrix  2 251

•  Заборы и коммивояжеры  2 911

•  Игра HIP  1 880

•  Игра Go (Го)  1 797

•  Симулятор лифта  2 136

•  Программа укладки плитки  1 861

•  Генератор лабиринта  2 298

•  Проверка числового ввода  1 986

•  HEX View  2 295

•  Физический маятник  1 958

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

OLE сервер



Сервер - не суетись под клиентом!

Следующий код компилируется без проблем. Он не так ясен и понятен, но он может вам помочь:


unit Unit1;

interface
  function OLEfunction(x, y, z: integer): integer; cdecl; export;

implementation

function OLEfunction(x, y, z: integer): integer;
begin

end;

procedure buildOLEstructure;
var
  F: pointer;
begin
  F := @OLEfunction; { Компилируется без проблем ... }
end;

end.

Используйте метод, приведенный ниже. Вы должны объявить одну вызывающую функцию к каждой комбинации параметров, которые вы собираетесь передавать. Затем вы вызываете вызывающую функцию (сорри) и передаете ей как указатель функцию, которую вы хотите вызвать (еще раз сорри). Непонятно? Поясню на примере:


library Pcdecl;

function olefunction(a1 : pchar; a2 : longint; x : integer )  : integer;

cdecl; export;
begin

end;

function callolefunction(func : pointer; a1 : pchar; a2 : longint; x :
integer)  : integer;

assembler;
asm

push        x                   { помещаем параметры в обратном порядке }
push        word ptr a2 + 2     { если 32-битная величина передается в
                                  этих двух шагах, то начинаем с самой
                                  "высокой" (high) части }
push        word ptr a2
push        word ptr a1 + 2
push        word ptr a1
call        func
add        sp, 10               { восстанавливаем стек добавлением вытолкнутых
                                  байтов. Обратите внимание на то, что func не
                                  была вытолкнута }
end;

procedure buildolefunction;
var

f         : pointer;
reslt     : integer;
begin

f := @olefunction;
{ --- }
reslt := callolefunction(f, 'Здравствуй, мир', 1000000, 25);
{ --- }
end;

begin

{ --- }
end.

На моем компьютере это компилируется без проблем. Должно работать и у вас. Предупреждение. Обращение к методам должно быть немного другим, нежели к функциям.





Похожие по теме исходники

Win Console

Molecula (3D молекула)

Molecule (молекула)

Console FTP

 

CMD OLE

DeParole

Console SmartEngine

Close Console on Event

 

Console Task Manager

Stud WebServer (web-сервер)

Proxy 1.0 (прокси-сервер)




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте