Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2007, 11:53   #11
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Цитата:
ы описал эти типы не в ДЛЛ а в проге
Описал И там И там
Цитата:
Определен в юните Classes,
Ну это не проблема. При двояком толковании можно указывать
Код:
Var f:UnitName.Type
=) Ну да лан...
TROXEVASIN, ждём-с уточнений. (а именно: какую имеено ошибку получаешь {это для начала} )
Maslan вне форума Ответить с цитированием
Старый 22.10.2007, 21:15   #12
TROXEVASIN
 
Регистрация: 20.10.2007
Сообщений: 6
По умолчанию

Вот DLL(она еще не дописана):
library Classy;

uses
SysUtils,
Classes;
{$R *.res}
type
PRabota=^TRabota;
PSsylka=^TSsylka;
PStek=^TStek;
TRabota = class
Imya: String;
no: integer;
PredshRab: String;
a: integer;
b: integer;
m: integer;
SredProd: real;
D: real;
SKO: real;
Color: byte;
next: PRabota;
StekSledRab: PStek;
end;
TSsylka = class
AdrRab:PRabota;
next:PSsylka;
end;
TStek = class
Home: PSsylka;
Position: PSsylka;
end;
TList = class
Home: PRabota;
end;
procedure RabotaADD(Imyae,PredshRabe:string;n oe,ae,be,me:integer;List:TList); stdcall;
Var Rab:PRabota;
St:Pstek;
begin
if List.Home=nil
then //Свежесозданный и будет Началом
begin
New(Rab);
Rab^:=TRabota.Create;
Rab.Color:=0;
Rab.Imya:=Imyae;
Rab.no:=noe;
Rab.PredshRab:=PredshRabe;
Rab.a:=ae; Rab.b:=be; Rab.m:=me;
Rab.SredProd:=(ae+4*me+be)/6;
Rab.SKO:=(be-ae)/6;
Rab.D:=Sqr(Rab.SKO);

New(St);
St^:=TStek.Create;
St.Home:=nil;
St.Position:=nil;
Rab.StekSledRab:=St;

List.Home:=Rab;
List.Home.next:=nil;
end
else //Свежесозданный встает в конец очереди
begin
Rab:=List.Home;
while Rab.next<>nil do Rab := Rab.next;
New(Rab.next);
Rab.next^ := TRabota.Create;
Rab.next.next:=nil;
Rab.next.Color:=0;
Rab.next.Imya:=Imyae;
Rab.next.no:=noe;
Rab.next.PredshRab:=PredshRabe;
Rab.next.a:=ae; Rab.next.b:=be; Rab.next.m:=me;
Rab.next.SredProd:=(ae+4*me+be)/6;
Rab.next.SKO:=(be-ae)/6;
Rab.next.D:=Sqr(Rab.next.SKO);
end;
end;
procedure SsylkaADD(Rab:PRabota;RabAdr:PRabot a); stdcall;
Var Ssylka:PSsylka;
begin
if Rab<>nil
then
begin
if Rab.StekSledRab.Home=nil
then //Свежесозданный и будет Началом
begin
New(Ssylka);
Ssylka^:=TSsylka.Create;
Ssylka.AdrRab:=RabAdr;
Rab.StekSledRab.Home:=Ssylka;
Rab.StekSledRab.Home.next:=nil;
end
else //Свежесозданный встает в конец очереди
begin
Ssylka:=Rab.StekSledRab.Home;
while Ssylka.next<>nil do Ssylka := Ssylka.next;
New(Ssylka.next);
Ssylka.next^ := TSsylka.Create;
Ssylka.AdrRab:=RabAdr;
Ssylka.next.next:=nil;
end;
end;
end;
exports
RabotaADD, SsylkaADD;
begin
end.

А вот содержимое файла из которого программа читает:

A;1; 0;2;5;8
B;2; 1;6;9;12
C;3; 1;6;7;8
D;4;2,3;1;4;7
E;5; 1;8;8;8
F;6;4,5;5;14;17
G;7; 3;3;12;21
H;8;6,7;3;6;9
I;9; 8;5;8;11
TROXEVASIN вне форума Ответить с цитированием
Старый 22.10.2007, 21:18   #13
TROXEVASIN
 
Регистрация: 20.10.2007
Сообщений: 6
По умолчанию

Вот текст самой программы(начало):
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ImgList, ComCtrls, ToolWin, Grids, ExtCtrls, StdCtrls,
TeEngine, Series, TeeProcs, Chart;
type
PRabota=^TRabota;
PSsylka=^TSsylka;
PStek=^TStek;
TRabota = class
Imya: String;
no: integer;
PredshRab: String;
a: integer;
b: integer;
m: integer;
SredProd: real;
D: real;
SKO: real;
Color: byte;
next: PRabota;
StekSledRab: PStek;
end;
TSsylka = class
AdrRab:PRabota;
next:PSsylka;
end;
TStek = class
Home: PSsylka;
Position: PSsylka;
end;
TList = class
Home: PRabota;
end;
DLLprocA = procedure(Imyae,PredshRabe:string;n oe,ae,be,me:integer;List:TList); stdcall;
DLLprocB = procedure(Rab:PRabota;RabAdr:PRabot a); stdcall;
TfmMain = class(TForm)
ToolBar1: TToolBar;
tbOpen: TToolButton;
tbClose2: TToolButton;
ImageList1: TImageList;
Panel1: TPanel;
sgTablica: TStringGrid;
PageControl1: TPageControl;
tsOboznacheniya: TTabSheet;
tsRaspredelenie: TTabSheet;
OpenDialog: TOpenDialog;
tbRaschet: TToolButton;
tsGraf: TTabSheet;
lbOboznacheniya: TLabel;
Chart1: TChart;
Series1: TLineSeries;
Panel2: TPanel;
Panel3: TPanel;
Image1: TImage;
Label1: TLabel;
ToolButton1: TToolButton;
procedure FormCreate(Sender: TObject);
procedure tbOpenClick(Sender: TObject);
procedure Open;
procedure RabotaPoNomeru(nomer:integer);//:PRabota;
procedure tbClose2Click(Sender: TObject);
procedure tbRaschetClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
DLLHandle: THandle;
RabotaADD: DLLprocA;
SsylkaADD: DLLprocB;
public
{ Public declarations }
end;
var
fmMain: TfmMain;
List: Tlist;
z: integer;
CurPoisk:PRabota;
TROXEVASIN вне форума Ответить с цитированием
Старый 22.10.2007, 21:19   #14
TROXEVASIN
 
Регистрация: 20.10.2007
Сообщений: 6
По умолчанию

(продолжение):
implementation
{$R *.dfm}
procedure TfmMain.RabotaPoNomeru(nomer:intege r);//:PRabota;
begin
CurPoisk:=List.Home;
if nomer=0 then CurPoisk:=nil//result:= nil
else begin
while CurPoisk.no<>nomer do CurPoisk:=CurPoisk.next;
// result:=CurPoisk;
end;
//
end;

procedure TfmMain.Open;
var f:textFile;
i,t,d,k,l,n: integer;
S: string;
begin
OpenDialog.InitialDir:=ExtractFileP ath(Application.exename);
if OpenDialog.Execute and FileExists(OpenDialog.FileName) then begin
AssignFile(f,OpenDialog.FileName);
Reset(f);
n:=0;
repeat
inc(n);
t:=1;
d:=0;
k:=0;
Readln(f,s);
l:=length(s);
for i:=t to l do begin
inc(d);
if s[i]=';' then begin
sgTablica.Cells[k,n]:=Copy(s,t,d-1);
inc(k);
d:=0;
t:=i+1;
end;
if i=l then sgTablica.Cells[k,n]:=Copy(s,t,d);
end;
sgTablica.RowCount:=sgTablica.RowCo unt+1;
until EOF(f);
sgTablica.RowCount:=sgTablica.RowCo unt-1;
CloseFile(f);
end;
end;
procedure TfmMain.FormCreate(Sender: TObject);
begin
fmMain.Caption:= 'ПЕРТ';
tsOboznacheniya.Caption:='Обозначен ия';
tsGraf.Caption:='Граф';
tsRaspredelenie.Caption:='Распредел ение';
Panel3.Caption:='';
OpenDialog.Filter:='Файлы проекта(*.prt)|*.prt';
lbOboznacheniya.Caption:='НР Название работы'+#13+
'№ Индекс работы'+#13+
'ООП Оптимистическая оценка продолжительности'+#13+
'НВОП Наиболее вероятная оценка продолжительности'+#13+
'ПОП Пессимистическая оценка продолжительности'+#13+
'СП Средняя продолжительность'+#13+
'СКО Среднеквадратическое отклонение'+#13+
'Д Дисперсия';
sgTablica.Cells[0,0]:='НР';
sgTablica.Cells[1,0]:='№';
sgTablica.Cells[2,0]:='ПР';
sgTablica.Cells[3,0]:='ООП';
sgTablica.Cells[4,0]:='НВОП';
sgTablica.Cells[5,0]:='ПОП';
sgTablica.Cells[6,0]:='СП';
sgTablica.Cells[7,0]:='СКО';
sgTablica.Cells[8,0]:='Д';
Label1.Caption:= 'Критические работы'+#13+'Ожидаемая продолжительность проекта';
List:=Tlist.Create;
end;
procedure TfmMain.tbOpenClick(Sender: TObject);
begin
Open;
end;
procedure TfmMain.tbClose2Click(Sender: TObject);
begin
Close;
end;
procedure TfmMain.tbRaschetClick(Sender: TObject);
var t,d,l,i,a,b,m, nomer: integer;
S,Im, PRab: string;
Cur: PRabota;
begin
for i:=1 to sgTablica.RowCount-1 do begin
Im:=sgTablica.Cells[0,i];
nomer:=StrToInt(sgTablica.Cells[1,i]);
PRab:=sgTablica.Cells[2,i];
a:=StrToInt(sgTablica.Cells[3,i]);
m:=StrToInt(sgTablica.Cells[4,i]);
b:=StrToInt(sgTablica.Cells[5,i]);
RabotaADD(Im,PRab,nomer,a,b,m,List) ;
end;
Cur:=List.Home;
for i:=1 to sgTablica.RowCount-1 do begin
sgTablica.Cells[6,i]:=FloatToStr(Round(Cur.SredProd*100 0)/1000);
sgTablica.Cells[7,i]:=FloatToStr(Round(Cur.SKO*1000)/1000);
sgTablica.Cells[8,i]:=FloatToStr(Round(Cur.D*1000)/1000);
Cur:=Cur.next;

end;

Cur:=List.Home;
//
repeat
z:=0;
t:=1;
d:=0;
S:=Cur.PredshRab;
l:=length(S);
for i:=t to l do begin
inc(d);
if s[i]=',' then begin
z:=StrToInt(Copy(s,t,d-1));
d:=0;
t:=i+1;
//SsylkaADD(RabotaPoNomeru(z),Cur);
RabotaPoNomeru(z);
SsylkaADD(CurPoisk,Cur);
//
end;
if i=l then begin
z:=StrToInt(Copy(s,t,d));
//SsylkaADD(RabotaPoNomeru(z),Cur);
RabotaPoNomeru(z);
SsylkaADD(CurPoisk,Cur);
//
end;
end; //
Cur:=Cur.next;
until (Cur=nil); //
List.Destroy;
List:= TList.Create;
end;
procedure TfmMain.FormShow(Sender: TObject);
begin
DLLHandle:= LoadLibrary('Classy');
if (DLLHandle>32) then begin
@RabotaADD:= GetProcAddress(DLLHandle,'RabotaADD ');
@SsylkaADD:= GetProcAddress(DLLHandle,'SsylkaADD ');
end
else begin
ShowMessage('Библиотека отсутствует!!!');
Close;
end;
end;
procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
List.Destroy;
FreeLibrary(DLLHandle);
end;
end.

ОШИБКУ нашел

Последний раз редактировалось TROXEVASIN; 22.10.2007 в 21:52.
TROXEVASIN вне форума Ответить с цитированием
Старый 22.10.2007, 23:56   #15
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Я несколько занят. Точнее - по уши =)))

TROXEVASIN, если что-то нужно - напиши ещё пост:
"хочу вот так, но не пашет. Ругается:[текст ошибки]"


Хранить объявление+описание классов в dll нельзя.

Последний раз редактировалось Maslan; 23.10.2007 в 01:06.
Maslan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
необходимо сделать несколько документов: акт, счет и т.п. Kisunya2104 Microsoft Office Excel 5 17.05.2009 18:35
про СТЕК anco Паскаль, Turbo Pascal, PascalABC.NET 5 06.07.2008 22:29
Стек Еленка Помощь студентам 2 06.06.2008 18:58
Стек Foky Паскаль, Turbo Pascal, PascalABC.NET 8 13.05.2008 18:39
Стек Dr.zlo Работа с сетью в Delphi 6 09.07.2007 07:59