| Библиотека программирование, программирование, языки программирования, книги программирование | На сайте представлена информация про программирование в Интернете и работу |
|
Свойство Color, Color в StatusBar не меняется Винды полетели!!! На юг, зимовать!!!, Как копировать МоиДокументы... Media, CD Screen Saver, Run Sound, Mute (On/Off) как создать новый компонент delphi линия в пиксель между caption формы и рабочей обла, как убрать, закрасить Window, Minimize Minimize, Minimize All TADOConnection и пароль Sound, Bakance Подключение !!!Снимок эксрана, Как сделать? прописывание полей в DBGrid'e delphi and word TListView рисование., OwnerData, OwnerDraw Импортирование методов DLL Max Размеры TImage.Bitmap.Width &&, TImage.Bitmap.Heigth Принтеры: Функция EnumJobs работает неправильно!! Как Вы относитесь к курящим девушкам? Зацепить Dll, Динамически подцеплять динамические би.. Сжатие БД Access Классы и DLL, Разбиение программы на модули PropertyEditor, Какой предок использовать для TCollectio Изменение пароля в БД access Что такое case-средства БД Pradox, Сортировка в обр. порядке CD in CD-ROM Edit-combobox Как найти слова в текстовом файле? множественный выбор в таблице? Зависает програма, когда делаю простой запрос, если запущено несколько копий WaitForSingleObject Проблема со шрифтом Доступ из Delphi к MSSQL, Идиотский вопрос КУРСОВОЙ ПРОЕКТ (НЕ БЕСПЛАТНО) Очень важно!!!!, Помогите!!! Pointer, ? Как вставить пароль в Web форму.?, Как вставить пароль в Web форму.? Как установить компонент?, Как установить компонент? Объясните код, TP 7.0, скрытие курсора ControlPanel, Как вызывать диалоги из Control Panel Помогите советом, Pascal массив компонентов KBD pascal динамический двумерный массив IXMLDocument, кодировочки... Посмотри, Как достать файл из корзины Ошибка Дескриптор окна Найти корень слова Неизвестный интерфейс sql-архивчик OpenProg, Как открыть файл программой? Как сделать сервер и клиент? 1245/1000, требуется число из типа integer разделит Control-ы, Если очень много кнопок. Отображение изменения значения свойства, в сосбственном компоненте Создание PathToNode, компонент TTreeview Recv PageControl Цвет шрифта DateTimePicker, в Delphi 6 TStringGrid, удаление строк (столбцов) Print, Проблемы Как Вы относитесь к курящим девушкам? Delphi&Word, Работа с Вордом вопрос smxml.dll помогите надо прогу, Delphi llPDFLib фильтр экспорта для FastReport, помогите примером ! |
Платные хостинги Раскрутка сайта Книги по программированию Классы и DLL, Разбиение программы на модули
- Всем привет!Подскажите, плиз, как разбить прогу на несколько DLL и притом чтобы это было поумнее.Вся беда в том, что или нельзя делать классы в DLL или я незнаю как это делать. Вообщем, если кто знает как это сделать, то поделитесь, плиз.Заранее благодарен. - Выделяешь основные функции, и запихиваешь их в DLL.Я Вам посоветую прежде всего почитать хоть какую-нибудь литературу. Вот могу дать код, он написан в целях обучения моего младшего брата, показывающий, как работать с DLL на самом примитивном уровне. Думаю не сложно будет разобраться.Код DLL:Код library Alex;{ Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. }uses ShareMem, SysUtils, Classes;{$R *.RES}var GV: real;function AddInt(a, b: integer): integer;begin Result := a + b;end;function AddReal(c, d: real): real;begin Result := c + d;end;function AddString(e, f: string): string;begin Result := e + f;end;function DoSomething(): integer;begin Result := 1;end;exports AddInt, AddReal, AddString name 'AddStringFromDLL'; beginend.highlightSyntax('delphizOGJjM','delphi');Код проекта, подключающего DLL:Код unit Loader;interfaceuses ShareMem, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) e1: TEdit; e2: TEdit; e3: TEdit; ee1: TEdit; ee2: TEdit; ee3: TEdit; re1: TEdit; re2: TEdit; re3: TEdit; b1: TButton; b2: TButton; b3: TButton; procedure b1Click(Sender: TObject); procedure b2Click(Sender: TObject); procedure b3Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}function AddInt(a,b:integer): integer; external 'Alex.dll';function AddReal(c,d:real): real; external 'Alex.dll';function AddStringFromDll(e,f:string): string; external 'Alex.dll';procedure TForm1.b1Click(Sender: TObject);begin re1.text := IntToStr(AddInt(StrToInt(e1.text), StrToInt(ee1.Text)));end;procedure TForm1.b2Click(Sender: TObject);begin re2.text := FloatToStr(AddReal(StrToFloat(e2.text), StrToFloat(ee2.Text)));end;procedure TForm1.b3Click(Sender: TObject);begin re3.text := AddStringFromDLL(e3.text, ee3.Text);end;end.highlightSyntax('delphiMTc2ODg','delphi'); - Использование string в dll нежелательно, так как могут возникать проблемы с разделением памяти, вместо этого нужно целесообразней использовать PChar. Что и написано в тексте сгенеренного Дельфи проекта. - Согласен. - Народ, может я не так высказался, но то что вы написали всё понятно, проблема в другом, возможно ли каким бы то нибыло образом вынести классы (включая их определения) в DLL.То что можно все методы данного классы туда вынести - это понятно, но хотелось бы вынести САМ КЛАСС!Вопрос то конечно глупый, можно просто использовать activeX, но нехотелось бы... - Можно, а в чем проблема? - Да проблема то в том как импортировать - экспортировать метод - понятно, а как это применить к классу??? - Да нет просто использовать его, хотя наследование не исключено - Самый простой пример - TForm. По аналогии для любого другого класса. И, возможно, ты путаешь класс и экземпляр класса? Есть модуль в котором описан какой-то класс. Включи его в длл и в свою прогу. Ну и юзай его. - Да ничего я не путаю.Как делается наследование - я знаю. ПРОБЛЕМА В ТОМ, ЧТОБЫ КЛАСС БЫЛ ОПИСАН В DLL!!! - А по аоводу включения и туда и сюда - не хотелось бы т.к. это всё делается для того, чтобы получить прогу ввиде нескольких модулей и притом маленьких. - Да там как я понимаю надо описывать TLB.А в это TLB все параметры имеют весьма экзотичный тип.Да иего надо регистрить в реестре, что тоже снижает привлекательность. - В качестве ДЛЛ можно использовать пакеты Дельфи (BPL), поскольку они на самом деле являются ДЛЛ, но обладают большими возможностями при использовании классов. Какими точно я не помню - все ето я мельком просматривал в книге Марко Кенту "Delphi 6 для профессионалов". Так что поищи материальчик про их юзание. Это сообщение отредактировал <Spawn> - 29.5.2003, 14:51 |