Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

DLL и IB   Найти похожие ветки 

 
Snip ©   (2004-09-10 11:57) [0]

Приветик!!!! ВСЕМ!!! Млин может зхдесь есть народ кто уже сталикивалься с такой проблемой как разработка плагинов DLL для работы с IB, причем подключение к IB идет в главной форме приложения, а дополнительные формы для работы с IB подключаються динамически через DLL и вот как мне передать в DLL ссылку уже открытой базы данных, делал так:

procedure AddEmployee(App: TApplication; AID: ShortString; HIBD: Pointer); stdcall;

implementation

{$R *.dfm}

procedure AddEmployee(App: TApplication; AID: ShortString; HIBD: Pointer);
var
 TempApp: TApplication;
 fEditUsers: TfEditUsers;
begin
 ShowMessage("Ошибка при подключении DLL");
 TempApp:=Application;
 Application:=App;
 fEditUsers:=TfEditUsers.Create(Application);
 fEditUsers.IBD.SetHandle(HIBD);
 fEditUsers.ID:="0"{AID};
 fEditUsers.IsAdd:=True;
 fEditUsers.ShowModal;
 FreeAndNil(fEditUsers);
 Application:=TempApp;
end;


сначала я парилься с хендлом TIBDatabase, потому что свойства Handle было типа PVoid, думал я думал и до меня вроде доперло что это всего лишь паскалевский Pointer, или я опять заблуждаюсь??? ПОМОГИТЕ ПЛЗ! Заранее спасибо!!!!


 
Vlad ©   (2004-09-10 12:12) [1]


> Snip ©   (10.09.04 11:57)  

Почему бы просто не передать указатель на экземпляр TIBDataBase?
напр.:

procedure AddEmployee(App: TApplication; AID: ShortString; IBD: TIBDataBase);

только компилировать проект нужно будет с Runtime Packages


 
Snip ©   (2004-09-10 12:17) [2]


> Vlad ©

как я знаю вроде правильнее передавать Handle, это я вычитал где то в какой то умной статье (причем на английском языке...)... щас попробуем так как ты посоветовал!! но вопрос еще: при передачи параметры AID типа PChar или sHORTsTRING Функция вообще не вызываеться


 
Vlad ©   (2004-09-10 12:54) [3]


> Snip ©   (10.09.04 12:17) [2]


> это я вычитал где то в какой то умной статье

Если у тебя и библиотека и хост-аппликация написаны на Delphi, то можешь смело передавать указатель на TIBDataBase, проблем не будет.


> Функция вообще не вызываеться

Что значит не вызывается?
Вобще неплохо бы посмотреть как ты это делаешь (саму реализацию и вызов).
Если передаешь тип string, то нужно в uses добавлять модуль ShareMem (читай аннотацию в dpr-е библиотеки). Если же PChar, то нужно самому выделять память под переменную.
И еще, надеюсь, не забыл указать stdcall ?


 
Snip ©   (2004-09-10 13:01) [4]


> Vlad ©   (10.09.04 12:54) [3]


> Вобще неплохо бы посмотреть как ты это делаешь (саму реализацию
> и вызов).

Реализация написана в вопросе этой ветки, а вызов:
procedure AddEmployee(App: TApplication; AID: ShortString; AIBD: TIBDatabase); stdcall; external "dll\employee.dll";
...
procedure TfObjects.actAddEmployeeExecute(Sender: TObject);
begin
 AddEmployee(Application, lvObjects.Selected.Caption, DM.IBDatabase);
end;


 
Vlad ©   (2004-09-10 13:04) [5]


> Snip ©   (10.09.04 13:01) [4]

Ну а ты разобрался с той аннотацией, которая написана в .DPR твоей библиотеки, по поводу использования типа string и модуля sharemem ?


 
Snip ©   (2004-09-10 13:14) [6]


> Vlad ©   (10.09.04 13:04) [5]

Это я уже давно знаю... давно с ShareMem разобрался, но понимешь, я же String не использую.... я использую ShortString или PChar, а при использовании этих типов ShareMem не обязателен....


 
Vlad ©   (2004-09-10 14:07) [7]

Что касается PChar - тут использовать ShareMem не нужно, но тогда ты сам должен выделять память под указатель, до того как передать его в библиотеку, а так же самостоятельно освобождать память из под этого указателя в конце.
По поводу ShortString - сам лично не проверял, но сдается мне, что ты ошибаешься.
Тем более что ясно же написано:
This applies to all strings passed to and from your DLL--even those that are nested in records and classes


 
Zacho ©   (2004-09-10 19:24) [8]

Проще всего использовать BPL а не DLL


 
DrPass ©   (2004-09-11 11:01) [9]


> Это я уже давно знаю... давно с ShareMem разобрался, но
> понимешь, я же String не использую....

Если ты передаешь указатель на экземпляр класса, тоже нужно использовать sharemem


 
Snip ©   (2004-09-12 14:36) [10]


> Zacho ©   (10.09.04 19:24) [8]

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


 
yaric   (2004-09-13 19:15) [11]

>Snip

Пакеты использовать также как и библиотеки
только вместо LoadLibrary LoadPackage вызывать надо.
Опыт показывает что с пакетами намного удобнее,
ну хотя бы из=за того что Application передавать не надо



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

Форум: "Базы";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
1-1095425335
MakNik
2004-09-17 16:48
2004.10.10
EInvalidPointer


4-1093796556
Зяц
2004-08-29 20:22
2004.10.10
Подключекние герлянды к компьютеру


14-1095944594
alless
2004-09-23 17:03
2004.10.10
Pentim 5?


14-1095088509
Jus
2004-09-13 19:15
2004.10.10
Есть ли среди вас люди которые хотят сделать какую нибудь игру..


3-1094716608
Klerk
2004-09-09 11:56
2004.10.10
Два приложения используют BDE.





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