Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];
ВнизПомогите с испльзованием 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c