Форум: "Основная";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];
ВнизПроблема с 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c