Главная страница
    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.03 c
3-1085571485
den_777
2004-05-26 15:38
2004.06.20
Уникальные индексы и констрейнты


1-1086265053
Eugene83
2004-06-03 16:17
2004.06.20
Доступ к переменным модуля Проэкта


6-1083150513
csr
2004-04-28 15:08
2004.06.20
Ошибка ТСР соединения


1-1086612672
AGGRESSOR
2004-06-07 16:51
2004.06.20
Продолжение выполнения кода со след. стр. после ошибки


1-1086760977
James Bond
2004-06-09 10:02
2004.06.20
Как в TMaskEdit вставить картинку





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский