Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1085911034
ИМХО
2004-05-30 13:57
2004.06.20
Ура!


8-1081353832
Wm.DIGGER
2004-04-07 20:03
2004.06.20
Запись AVI шек ...


14-1086021025
Adminus
2004-05-31 20:30
2004.06.20
Виртуальный сервер.


14-1085951356
Knight
2004-05-31 01:09
2004.06.20
Песни...


3-1085722879
Смертник
2004-05-28 09:41
2004.06.20
Помогите пожалуйста с DBGrid.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский