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

Вниз

Проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.033 c
3-1080548815
gedd
2004-03-29 12:26
2004.04.25
Поле "Счетчик" в MS SQL Server 2000.


6-1077882441
ALeX.B.
2004-02-27 14:47
2004.04.25
Как ускорить работу ICMP из ICS(KOL)?


3-1080797779
LEXX
2004-04-01 09:36
2004.04.25
Где базы?


6-1077128883
sergeport
2004-02-18 21:28
2004.04.25
как отослать данные формы с ENCTYPE=multipart/form-data


14-1080582631
Мазут Береговой
2004-03-29 21:50
2004.04.25
Посмотрел "Passions of the Christ"...





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