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

Вниз

Проблема с DLL и StrinGrid-ом...   Найти похожие ветки 

 
Marat_D ©   (2004-04-02 04:54) [0]

На главное форме имеется StringGrid1 нужно загрузить (сохранить) в него файл, например, Grid.txt с помощью своей DLL – LoadGridDLL.dll по нажатию кнопки Button1. Метод загрузки DLL динамический.
Вопрос заключается в том: Почему, когда размер StringGrid-a очень большой 100x100 и когда пытаешься загрузить/сохранить файл с помощью функций DLL программа виснет ??? Почему ? Может я чего неправильно делаю??? У кого есть какие-нибудь варианты или советы???

Листинг Unit-а:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   StringGrid1: TStringGrid;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

type TLoadGrid = procedure (LoadFile: string; StringGrid: TStringGrid); stdcall;

var
 Form1: TForm1;
 LoadGrid : TLoadGrid;
 DLLHandle: THandle;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 DLLHandle:=LoadLibrary("LoadGridDLL.dll");
 @LoadGrid:=GetProcAddress(DLLHandle,"GridLoad");
 LoadGrid("Grid.txt",Form1.StringGrid1);
 FreeLibrary(DLLHandle);
end;

end.

Листинг DLL:
library LoadGridDLL;

uses
 SysUtils, StdCtrls, Dialogs, System, Printers, Grids;

{$R *.res}

procedure GridLoad(LoadFile: string; StringGrid: TStringGrid); stdcall;
var
 LoadTextFile: TextFile;
 i,j: integer;
 TempCells: string;
begin
 AssignFile(LoadTextFile,LoadFile);
 Reset(LoadTextFile);
 for i:=0 to (StringGrid.ColCount) do
   for j:=0 to (StringGrid.RowCount) do
     begin
       Readln(LoadTextFile,TempCells);
       StringGrid.Cells[i,j]:=TempCells;
     end;
 CloseFile(LoadTextFile);
end;

procedure GridSave(SaveFile: string; StringGrid: TStringGrid); stdcall;
var
SaveTextFile: TextFile;
i,j: integer;
begin
 AssignFile(SaveTextFile,SaveFile);
 Rewrite(SaveTextFile);
 for i:=0 to (StringGrid.ColCount) do
   for j:=0 to (StringGrid.RowCount) do
     Writeln(SaveTextFile,StringGrid.Cells[i,j]);
 CloseFile(SaveTextFile);
end;

exports
 GridLoad,
 GridSave;

begin
end.


 
ssk   (2004-04-02 09:38) [1]

ShareMem забыл


 
VMcL ©   (2004-04-02 10:35) [2]

Боюсь, что ShareMem делу не поможет. Возможно, BPL спасут отца (бело)русской демократии.


 
ssk   (2004-04-02 10:53) [3]

>VMcL ©  (02.04.04 10:35) [2]
Боюсь, что ShareMem делу не поможет.


только что не поленился поверить - без ShareMem не работает. с ShareMem - все ОК.


 
VMcL ©   (2004-04-02 12:07) [4]

>>ssk  (02.04.04 10:53) [3]

Повезло. То, что код заработал сейчас, не значит, что он принципиально правильный.


 
ssk   (2004-04-02 12:13) [5]

>VMcL

согласен


 
Marat_D ©   (2004-04-02 16:47) [6]

>> ssk, для всехчто за ShareMem? и где именно надо воспользоваться ShareMem?...Полазил по help-у и понял что это модуль, который надо подключить в uses перед модулем system
uses ...ShareMem, System,...; Понятно, что надо использовать какие-то функциии из ShareMem (а может и ненадо). Я не имел дела с ShareMem расскажи, что нужно сделать, чтобы все работало нормально?


 
VMcL ©   (2004-04-03 14:29) [7]

>>Marat_D ©  (02.04.04 16:47) [6]

Просто перед самым первым модулем в uses проекта DLL, нужно вставлять ShareMem. Например, вместо
uses
 SysUtils,
 Classes;

должно стать
uses
 ShareMem,
 SysUtils,
 Classes;


Сразу о плохом: для работы такой библиотеки потребуется BORLNDMM.DLL (в Delphi 6).

Но, ИМХО, см. [2].


 
Marat_D ©   (2004-04-03 17:37) [8]

>>VMcL
А как обойтись без BORLNDMM.DLL? Не будешь ты ее с собой всюду таскать… Может, кто сталкивался с этой проблемой [см. самое начало топика]. Может у кого-нибудь есть другие решения этой проблемы? Или алгоритмы реализации?


 
VMcL ©   (2004-04-05 00:15) [9]

>>Marat_D ©  (03.04.04 17:37) [8]

В надцатый раз повторяю:
BPL (package + F1)
Подойдёт?


 
ssk   (2004-04-05 09:27) [10]

http://delphimaster.ru/news/

download link
http://www.delphipages.com/edit/count.cfm?ID=4166

по этой сслыке ищи ShareMemRep. используется так же как и ShareMem, но без таскания за собой borlndmm.dll


 
VMcL ©   (2004-04-05 10:19) [11]

>>ssk  (05.04.04 09:27) [10]

Если мне не изменяет склероз, ShareMemRep можно использовать только, когда и exe-приложение и dll пишутся на Delphi.


 
ssk   (2004-04-05 11:51) [12]

да


 
ssk   (2004-04-05 11:52) [13]

хотя, именно вот сейчас я хочу провести эксперимент с C++bulder"ом и ShareMemRep. посмотрим, что получится... ;-)


 
Marat_D ©   (2004-04-06 03:49) [14]

>>ssk, VMcL
Чуваки спасибо за помощь...
>>ssk:

хотя, именно вот сейчас я хочу провести эксперимент с C++bulder"ом и ShareMemRep. посмотрим, что получится... ;-)
->Расскажешь что получится, может без ShareMemRep можно обойтись в  C++bulder"e.
->В C++bulder"e, как и в Delphi плохо реализована работа с DLL (как мне кажется, может я и ошибаюсь).В VC++ она реализована лучше, но это только лишь мое мнение...


 
Suntechnic ©   (2004-04-06 04:49) [15]

В C++bulder"e, как и в Delphi плохо реализована работа с DLL...
Это всё-равно что "почти беременна" :)

В VC++ она реализована лучше, но это только лишь мое мнение...

Это всё-равно что "лучше беременна" :)


 
ssk   (2004-04-06 09:10) [16]

>Marat_D ©  (06.04.04 03:49) [14]
->Расскажешь что получится


что могу сказать...   ShareMemRep только для Delphi (см. диалог [11] и [12]). чтобы ДЛЛ работала и там и там без использования менеджера памяти, надо параметры передавать либо в Char, либо в ShortString. это вообще и в книгах написано и в комментариях мастеров ДЛЛ в Delphi и в Builder"е. вот такие дела. ;-)


 
VMcL ©   (2004-04-08 19:48) [17]

>>Marat_D ©  (06.04.04 03:49) [14]
>В C++bulder"e, как и в Delphi плохо реализована работа с DLL
>(как мне кажется, может я и ошибаюсь).
>В VC++ она реализована лучше, но это только лишь мое мнение...

Надо же, какие кривые руки у программистов из Borland и какие ровные у оных из Microsoft.


 
panov ©   (2004-04-08 20:08) [18]

borlndmm.dll. размер 25600.

Из-за такого размера копья ломать?



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

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

Наверх




Память: 0.51 MB
Время: 0.022 c
7-1077797937
Программер
2004-02-26 15:18
2004.04.25
Работа с USB


14-1080585174
Piter
2004-03-29 22:32
2004.04.25
А что с fido7.ru.delphi?


4-1077521025
Gas
2004-02-23 10:23
2004.04.25
Как определить, что окно что-то обрабатывает? (висят "часики")


3-1080569640
Алексей П.
2004-03-29 18:14
2004.04.25
Друзья! Помогите с параметрами TSQLConnection


14-1080746752
AlexKniga
2004-03-31 19:25
2004.04.25
Кто-нибудь установил Win2K/XP на SATA RAID без floppy?