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

Вниз

100 раз...передача данных в DLL   Найти похожие ветки 

 
Bes ©   (2005-02-11 01:12) [0]

Мастера!

Есть серверная часть к которой могут подлючаться плагины (DLL)
так вот... мне надо обеспечить устойчивую связь между плагинами и осн. прогой.
я передаю указатель на класс TStringList
объект создаю в основной программе и туда сюда его гоняю...

это нормально и правильно? всмысле с памятью и скоростью?

не лучше ли использовать PChar


 
Digitman ©   (2005-02-11 08:17) [1]


> это нормально и правильно? всмысле с памятью и скоростью?
>
> не лучше ли использовать PChar


если ты умудришься реализовать более эффективные методы перераспределения памяти, нежели методы используемые этим классом, то тогда может и есть резон использовать PChar

кстати, про единый менеджер памяти в случае передачи дин.структур между хост-приложением и ДЛЛ не забыл ?


 
Bes ©   (2005-02-11 14:28) [2]

у меня два вопроса

1) а сам класс TStringList рационально ли распеделяет память, т.е. потрошить его надо или нет?

2) не очень понял насчет единого менеджера памяти...

вообще у меня происходит так

для каждой DLL создается класс TModuleClass


TModuleClass=class
DLLHandle:THandle;
loaded:boolean;
name:string[20];
version:string[20];
buildate:string[10];
block:boolean;
TTL:integer;
DateTime:TdateTime;
ToModule:TStringList; //это класс на данные передоваемые в модуль
FromModule:TStringList; //это класс на данные передоваемые из модуля в основное преложение
Filename:string[255];
Path:string[255];
open:procedure (ModuleID:pointer);stdcall; //процедура в длл передаю указатель на класс Модуля
readmsg:procedure; // "собые"  на поступление команды.
Protocol:TSTringList;
constructor Create;
destructor Free;
end;


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

так вот при поступлении команды от клиента, я помещаю данные в TModule.TOModule (данные TStringList создается в Create"e класса)
потом выполняю  TModule.readmsg;

в readmsg в библиотеке происходит так:

создается TThread
который имеет в себе свойство Data:TStringList;
Оно создается и в него пихается содержимое Tmodule.ToModule
(data.text:=TModule.Tomodule.text)
и запускается поток с параметром FreeOnTerminate:=true;
в Execute выполеняется команда, которая указана в Data.strings[0]
..это в кратце, кстати обратное, т.е. из длл в основную прогу таким же образом работает, т.к. модулей может быть много.. а данные "общие".
все рулится очень не плохо...
единственная ошибка это при закрытии проги "RunTime 217"... читал о 216 ошибке, так что думаю что 217 что-то похожее...где-то я намутил что-то..

так вот попутные вопросы:
1) как такая реализация, оправдывает ли она себя или просто нагружает комп?
2) что следует окротекрировать исправить ...?
3) почему вылетает 217 ошибка

кстати там и там подключаю ShareMem..
заранее благодарен!


 
Digitman ©   (2005-02-11 14:44) [3]

ох и нахреновертил ты ... и в стратегии , и в коде ее реализующем ..

даже не знаю с чего начать "бомбить" тебя за это безобразие ...


> 1) а сам класс TStringList рационально ли распеделяет память,
> т.е. потрошить его надо или нет?


вполне рационально.
не представляю, как ты вознамерился его "потрошить" и что под этим подразумевается ..


> 2) не очень понял насчет единого менеджера памяти


тогда бросай свои "серверы" и "плагины" и штудируй теорию ..
в части того как Борланд реализует распределение/перераспределение/освобождение памяти, используемой в программах под его управлением ..


> destructor Free;


что еще за Free ?
TObject уже имеет метод класса Free, имеющий строго определенное назначение


> при закрытии проги "RunTime 217"... читал о 216 ошибке,
> так что думаю что 217 что-то похожее...где-то я намутил
> что-то..
> 3) почему вылетает 217 ошибка


про встроенный в Делфи отладчик и пошаговую трассировку кода слышал что-нибудь ?


 
Bes ©   (2005-02-11 14:55) [4]

тогда где почитать "про единый менеджер памяти",
а насчет Free... ну мне же надо мои TStringListы убить или как?

трасировку делал.. вылетает при FreeLibrary


 
Digitman ©   (2005-02-11 15:04) [5]


> насчет Free


метод Free есть метод класса TObject, в ходе исполнения которого вызывается вирт.метод-деструктор объекта-наследника класса TObject ...

в дан.случае наследником класса TObject (прямым) у тебя является тыой класс TModuleClass, поэтому все что от тебя требовалось - объявить и реализовать в своем классе
destructor Destroy; override;

в теле перекрытого Destroy-метода ты вправе освободить все ресурсы, занятые твоим классом в ходе его конструирования и работы его методов

SomeObject.Free делает следующее :
- проверяется, не nil-ли SomeObject;
- если не nil, то вызывается его метод-деструктор Destroy, если ты его перекрыл, а если не перекрыл, то метод-деструктор Destroy предка


 
Bes ©   (2005-02-11 15:11) [6]

интересно а если в

Free
а сделать так?

destructor TModuleClass.Free;
begin
if Assigned(ToModule) then ToModule.Free;
if Assigned(FromModule) then FromModule.Free;
inherited Free;
end;


 
Digitman ©   (2005-02-11 15:33) [7]


интересно а если


эксперименты должны быть ОСОЗНАННЫМИ !

TModuleClass=class
..
public
destructor Destroy; override;
end;

destructor TModuleClass.Destroy;
begin
ToModule.Free;
FromModule.Free;
inherited;
end;


> передоваемые


русский язык в школе учил или нет ?

для проверки правописания гласной в корне слова следует подобрать однокоренное слово, где сомнительная гласная имеет ударение ..

вот так хотя бы :

передАча

!!

это уже не очепятка, глаз это режет ..


 
Eraser ©   (2005-02-11 18:51) [8]

Bes ©
кстати там и там подключаю ShareMem..


Кстати, если в дальнейшем планируется переписывать сервер на MSVC++, то эти плагины работать не будут.


 
Bes ©   (2005-02-11 19:12) [9]

не плАнируется


 
Eraser ©   (2005-02-11 19:27) [10]

Bes ©

И правильно ))



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

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

Наверх




Память: 0.5 MB
Время: 0.045 c
1-1108537923
rezo
2005-02-16 10:12
2005.02.27
стои сервис


9-1101732389
malij
2004-11-29 15:46
2005.02.27
OpenGl


3-1107136265
mlitkin
2005-01-31 04:51
2005.02.27
Как узнать была ли изменена база?


1-1107967914
alexa
2005-02-09 19:51
2005.02.27
Динамическое меню


3-1107153874
TAN_K
2005-01-31 09:44
2005.02.27
ГРУППИРОВАНИЕ ДАННЫХ В ОТЧЕТЕ