Главная страница
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.008 c
14-13809
melifaro
2002-07-11 19:08
2002.08.05
Встреча Мастеров DELPHI В Санкт-Петербурге


7-13827
Maxs
2002-05-22 09:38
2002.08.05
Как конвертировать строку из DOS кодировки в WIN


3-13536
michael_B
2002-07-15 11:58
2002.08.05
Подскажите компонент!!!


3-13543
Ruslan_
2002-07-12 20:43
2002.08.05
Связанные таблицы


1-13717
BJValentine
2002-07-24 13:41
2002.08.05
Потоки