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

Вниз

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

 
Nostradamus ©   (2002-07-23 17:29) [0]

Моя программа вызывает ф-цию в длл создающую форму (которая в той же длл), юзер чё-то выбирает и потом результат возвращается и форма удаляется из памяти. Вроде бы всё нормально компилируется но прога постоянно крэшится.
Привожу частично код:
- в проге... -
type
TResRec = record
Variables : array [0..11] of Integer;
NewHS : array of TBought;
NewJob : Integer;
NewISP : Integer;
end;
...
function ExecuteAct(ActName : PChar; ValInfo : array of Integer) : TResRec; external "ACTIONS.DLL" name "ExecuteAction";
...
procedure TMain.BitBtn2Click(Sender: TObject);
var
MyTime : Integer;
Res : TResRec;
begin
MyTime := (5 - (gMonth mod 4)) * (gYear - 1995);
Res := ExecuteAct("PC Shop", [Plr.Bonuses[1], Plr.Know[0], MyTime]);
Plr.Know[0] := Plr.Know[0] - Res.Variables[0];
...
- в длл...
library actions;

uses
Forms, typelibU, SysUtils,
ShopU in "ShopU.pas"; {Shop}
...

//Эта ф-ция не совсем дописана
function ExecuteAction(ActName : PChar; ValInfo : array of Integer) : TResRec;
var
ShopForm : TShop;
I : Integer;
Res : TResRec;
begin
if ActName = "PC Shop" then begin
try
ShopForm := TShop.Create(Application);
ShopForm.PCShop(ValInfo[0], ValInfo[1], ValInfo[2]);
ShopForm.ShowModal;

SetLength(Res.NewHS, Length(ShopForm.BoughtWhatAr));
for I := Low(ShopForm.BoughtWhatAr) to High(ShopForm.BoughtWhatAr) do
Res.NewHS[I] := ShopForm.BoughtWhatAr[I];

Res.Variables[0] := -StrToInt(ShopForm.BLabel.Caption);
Res.NewJob := -1;
Res.NewISP := -1;
finally
ShopForm.Free;
end;
Result := Res;
end;
end;
...
exports
ExecuteAction;


 
Skier ©   (2002-07-23 17:33) [1]

>Nostradamus

!!!???

А ты указатель PResRec = ^TResRec не пытался
использовать и создавать TResRec ДИНАМИЧЕСКИ !?


 
Skier ©   (2002-07-23 17:37) [2]

>Nostradamus
И открытый массив не пробовал убирать !!!???


 
Nostradamus ©   (2002-07-23 18:05) [3]

Открытый массив обрать не могу... т.к. не знаю сколько будет итемов, а с указателем щас попробую


 
Nostradamus ©   (2002-07-23 18:12) [4]

чё-то с указателем тоже не складывается. Может напиши как ТЫ себе это представляешь с указателем...


 
Digitman ©   (2002-07-23 18:20) [5]

>Nostradamus

uses ShareMem, ...

И в хост-приложении и в DLL должно быть
это - как минимум ...

Но не есть это хорошо - взаимодействие модулей приложения через открытые массивы, дин.массивы и иже с ними



 
Skier ©   (2002-07-23 18:21) [6]

>Nostradamus
>Nostradamus

Если честно, то твоя запись TResRec и параметры DLL функции
это вообще хулиганство.

Например
1)ValInfo : array of Integer можно заменить
PChar-ом где элементы будут разделены запятыми.

2) можно вообще обойтись процедурой вместо функции.
Сформировать все данные в библиотеке, загнать их
в динамическую структуру, и передать указатель на неё
главному окну (например) хост-приложения через SendMessage
(в хост-приложении её разадресовать и обработать)
и затем освободить динамическую структуру(!)


 
Nostradamus ©   (2002-07-23 18:28) [7]

Digitman и Skier спасибо за советы.
Чувствую действительно нужно переделать всё это дело так чтоб без дин. массивов было.
Сейчас попробую что вы написали. Думаю теперь получится всё.



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

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

Наверх




Память: 0.48 MB
Время: 0.01 c
1-13652
DKalinin
2002-07-23 13:05
2002.08.05
Подскажите, пожалуйста, как получить список файлов в директории.


8-13729
Wild Cat
2002-04-01 14:46
2002.08.05
Проблемы с графикой,,,


1-13668
John0001
2002-07-23 15:20
2002.08.05
Динамически создаваемое меню....


1-13588
c0pYc@t
2002-07-24 14:22
2002.08.05
Thread


1-13709
jen_bond
2002-07-24 12:02
2002.08.05
ComboBox