Вверх ↑
Этот топик читают: Гость
Ответов: 2060
Рейтинг: 28
#1: 2007-12-11 22:16:15 ЛС | профиль | цитата
К примеру. Я создал DLL вот такого рода.

#sha
Add(DLL,5050313,224,168)
{
EventPoints=#6:Zapros|
link(Zapros,8944637:doTimer,[])
}
Add(Timer,8944637,287,168)
{
link(onTimer,8426931:doBeep,[])
}
Add(Beep,8426931,357,168)
{
}
С одной процедурой Zapros. Как мне эту процидуру вызвать в другой программе, которая делаеться на языке Дельфи? Как я понемаю, в начале эту DLL надо загрузить в память?
карма: 1

0
Ответов: 9906
Рейтинг: 351
#2: 2007-12-11 23:10:29 ЛС | профиль | цитата
Берешь элемент UseHiDLL
Нажимаешь Ctrl+F, и смотришь в свое удовольствие, как использовать
Там все на Дельфи написано
карма: 9

0
Ответов: 184
Рейтинг: 4
#3: 2007-12-12 03:00:10 ЛС | профиль | цитата
Как-то вот так более-менее у меня когда-то работало:
EXE code_7933.txt
DLL code_7934.txt
Только зачем это вообще нужно не понимаю
И обещанного удовольствия от просмотра тоже не получил...
карма: 1
Статус строка какая-то, сейчас посмотрім: %time%
0
файлы: 2code_7933.txt [2.1KB] [470], code_7934.txt [578B] [440]
Ответов: 2060
Рейтинг: 28
#4: 2007-12-12 17:55:57 ЛС | профиль | цитата
HuKTO, мне нужен код который будет компеллироваться в Дельфи 6, а не в HiAsm.

#pas
var fn : string; // ----
FID: Cardinal; // --
...
fn := 'C:\Program Files\HiAsm\Примеры программ\DLL\PervaiaDLL.dll'; //-
if FileExists(fn) then //--
begin //--
FID := LoadLibrary(PChar(fn)); //--
end; //-
А дальше как?

Вот эти строчки кода что означают?

#pas
FWork := TdllProc(GetProcAddress(FID,'doWork'));
FVar := TdllProc(GetProcAddress(FID,'GetVar'));
di := tdllInit(GetProcAddress(FID,'DllInit'));
if Assigned(di) then
di(dll_Event,dll_Data,self);
карма: 1

0
Ответов: 5446
Рейтинг: 323
#5: 2007-12-12 17:59:38 ЛС | профиль | цитата
Эдик, ХиАсм-овские dll экспортируют всегда ровно три функции - DllInit, doWork, GetVar. Названия понятны, я надеюсь? Второй код как раз и "цепляет" эти три функции.
карма: 1

0
Ответов: 184
Рейтинг: 4
#6: 2007-12-12 18:30:27 ЛС | профиль | цитата
Эдик писал(а):
мне нужен код который будет компеллироваться в Дельфи 6, а не в HiAsm.

Ответ вполне ожидаемый. Эдик, это ж пример
Изменить три строки и немного copy/paste из share.pas и всё работает:

#pas
program ProjectX;

uses
Windows, KOL;

type
PData = ^TData;
TData = record
Data_type: byte;
idata: integer;
sdata: string;
rdata: real;
Next, ldata: pointer;
end;

type
T_hi_dllInitProc = procedure(var _Data: TData; Index:word; DLL_Param:pointer);
T_hi_dllProc = procedure(var Data:TData; Index:word;_Param:pointer);
T_hi_DllInit = procedure(_onEvent,GetData:T_hi_dllProc; _Param:pointer; var DLL_Param:pointer);

procedure dll_Event(var _Data: TData; Index:word; Param:pointer);
begin
ShowMessage('[Input] Index: ' + int2str(Index) + ' , data: ' + _Data.sdata);
end;

procedure dll_Data(var _Data:TData; Index:word; Param:pointer);
begin end;

procedure doSomething(const DllName: string);
var
dll: cardinal;
InitProc: T_hi_DllInit;
p: pointer;
DoWork: T_hi_dllInitProc;
FData: TData;
s, dllfile: string;
begin
dllfile := DllName; //ReadString(_Data, DllName, '');
s := '<<<!!!TEXT!!!>>>'; //ReadString(_Data, Text, '');
FillChar(FData, SizeOf(FData), 0);
FData.data_type := 2{data_str};
FData.sdata := s; // _DoData(s);

dll := LoadLibrary(PChar(dllfile));
if dll = 0 then exit;
InitProc := GetProcAddress(dll,'_hi_DllInit');
if Assigned(InitProc) then
begin
InitProc(dll_Event, dll_Data, nil, p);
@DoWork := GetProcAddress(dll, '_hi_doWork');
if Assigned(doWork) then DoWork(FData, 0, p);
end;
FreeLibrary(dll);
end;

begin
doSomething('project1.dll');
end.
------------ Дoбавленo:

Почему слова program и uses в коде жирным не выделяются?
Opera 9
карма: 1
Статус строка какая-то, сейчас посмотрім: %time%
0
Ответов: 2060
Рейтинг: 28
#7: 2007-12-12 19:00:10 ЛС | профиль | цитата
А без КОЛ можно? Дело в том что я компиллирую на Делфи 6 и не хотелось бы туда подключать КОЛ.
карма: 1

0
Ответов: 184
Рейтинг: 4
#8: 2007-12-12 19:03:17 ЛС | профиль | цитата
KOL -> Dialogs, SysUtils
int2str -> intToStr
И зачем это всё-таки надо? Интересно просто очень почему-то стало...
карма: 1
Статус строка какая-то, сейчас посмотрім: %time%
0
Ответов: 9906
Рейтинг: 351
#9: 2007-12-12 19:39:23 ЛС | профиль | цитата
Я балдею, как вы ныряете, зеленые
карма: 9

0
Ответов: 206
Рейтинг: 19
#10: 2007-12-17 18:26:40 ЛС | профиль | цитата
а можно добавить компоненту CallDLL

Add(CallDLL,7804711,203,329)
{
}
точку Date DllName?
я побывал но у меня всё вылетало с ошибкой
карма: 0
Время : %time% Текущее время: %time%
0
Администрация
Ответов: 15295
Рейтинг: 1519
#11: 2007-12-17 19:01:36 ЛС | профиль | цитата
в теории этому ничто не мешает
карма: 27
0
11
Сообщение
...
Прикрепленные файлы
(файлы не залиты)