Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.044 c
1-1108294875
Olka
2005-02-13 14:41
2005.02.27
Можно ли добавить новое значение в DBLookupCombobox


3-1106810558
Julia
2005-01-27 10:22
2005.02.27
Перенос данных из одного поля в другие


14-1107456701
Gero
2005-02-03 21:51
2005.02.27
Нет ничего неозможного


1-1108021065
KingDog
2005-02-10 10:37
2005.02.27
вот знаете что то при n = 31 не считает


3-1106688163
MakedoneZ
2005-01-26 00:22
2005.02.27
Про компонент DBGrid и тип данных Boolean.





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