Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.57 MB
Время: 0.018 c
3-13575
AlexGreG
2002-07-12 12:04
2002.08.05
... Стоп ревреш ...


14-13794
Чувак13
2002-07-10 14:05
2002.08.05
про Дельфи и базы данных


7-13838
lak_b
2002-05-21 17:34
2002.08.05
как сделать чужое окно активным?


6-13739
z_1
2002-05-21 21:24
2002.08.05
Помогите с UDP


1-13695
Maxuz
2002-07-24 00:29
2002.08.05
Преобразование Фурье и его реализация на D6





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