Вверх ↑
Ответов: 184
Рейтинг: 4
#1: 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