Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

Помогите с испльзованием Dll   Найти похожие ветки 

 
Leks   (2004-06-01 12:03) [0]

История такая. Есть основная программа - сервер. В ней - массив объектов, процедуры к которым находятся в Dll (клиенте). Необходимо организовать обмен данными между клиентом и сервером. Объект-клиент создается на стороне сервера. Некоторые процедуры должны иметь параметры (пробовал, не получилось. При вызове процедуры с параметрами программа вылетает.).  

type TEnimals = object
ID:longint;
ThreadID:cardinal;
DLLID:cardinal;
epr:TEnimalsParam;
liveTime:longint;
msg:TMessageParam;
// -----------------
LifeProc:Procedure;stdcall;
Move:Procedure; //работает прекрасно
ProcessMessage:procedure(var msg:TMessageParam); // А это вылетает при вызове

constructor create;
destructor destroy;
end;
// -------------------------------------------

Пробовал создавать объект в Dll и там назначать процедуру. Так работает, но получается несколько одинаковых объектов.

library Cow;
uses
 SysUtils,
 Classes,
 LiveObjects in "../LiveObjects.pas",
 windows;
var
EN:TEnimalsParam;
Lobj:TEnimals;
{$R *.res}

Function LiveObject_ProcessMessage(var msg:TMessageParam):integer;stdcall;
begin
messageBox(0,PChar(IntToStr(msg.DataType)),"qqqq",MB_OK);
// result:=1;
end;

Procedure LiveObject_Move;stdcall;
var s:string;
begin
while true do
begin
 s:="Hello from Thread" + IntToStr(LObj.ID);
 MessageBox(0,PChar(s),"hello",MB_OK);
 sleep(3000);
end;
end;

procedure LiveObject_GetAddr(var obj:PEnimals);
begin
obj:=@LObj;
end;

Exports LiveObject_Move,
        LiveObject_ProcessMessage,
        LiveObject_GetAddr;
begin
lObj.create;
Lobj.ID:=100 + random(1000);
lobj.LifeProc := @LiveObject_Move;
LObj.ProcessMessage:=@LiveObject_ProcessMessage;

end.
Помогите!!!!!


 
Digitman ©   (2004-06-01 12:23) [1]

бред какой-то ..


> lObj.create;


это что такое ?


 
NeyroSpace ©   (2004-06-01 15:10) [2]

А если убрать stdcall;?


 
Leks   (2004-06-02 16:15) [3]

Не помогает! Перепробовал все варианты, чего только не ставил.


 
Digitman ©   (2004-06-02 16:23) [4]

ты в курсе, что есть такое понятие как пошаговая трассировка программы под управлением отладчика ?


 
leks   (2004-06-04 16:55) [5]

Конечно в курсе!! Так тут-же код в dll.
И вообще этот код - так просто попытки, на скорую руку. Задача определить процедуры в dll (они на всех одни). Объект - клиент и объект-сервер должны передавать данные друг другу, а процедуры использовать данные клиента (в идеале). Клиентов много, данные на каждого разные.


 
BFG9k   (2004-06-04 17:28) [6]

DLL тоже можно отлаживать , надо только указать процесс , который этот DLL использует : Меню Run - parameters- Host Application = "exe файл " (Delphi 7).



Страницы: 1 вся ветка

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
6-1083228771
-+= Evgeney =+-
2004-04-29 12:52
2004.06.20
SQL запрос через Socket


1-1086332978
AVK
2004-06-04 11:09
2004.06.20
TRichEdit. Добавление строки, слова которой разного цвета.


14-1086336663
Рамиль
2004-06-04 12:11
2004.06.20
Большой трафик ns


1-1086586867
ra4fcr
2004-06-07 09:41
2004.06.20
Формула в Excel


6-1083211206
FatBase
2004-04-29 08:00
2004.06.20
Не приходят письма