Главная страница
    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.46 MB
Время: 0.005 c
6-13741
Dup
2002-05-08 08:50
2002.08.05
Indy Pop3


14-13772
Bboy
2002-07-09 11:17
2002.08.05
Что за хрень, не получается поиграть!!!


1-13712
Dmitriy_D6
2002-07-24 11:59
2002.08.05
SOAP, Web-сервисы и Javascript


1-13603
drunik
2002-07-24 14:49
2002.08.05
Этот долбаный Excel


14-13803
CA
2002-07-10 14:46
2002.08.05
pdf





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