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

Вниз

DLL & Interbase UDF   Найти похожие ветки 

 
Roman9   (2002-04-27 04:29) [0]

Не получается подключить динамическую библиотеку

Суть приблизительно такая

В Delphi все работает нормально, но после того
как напишешь после Function ... cdecl;export;

А в базе
Declare external function
...
returns integer by value
(1 входной целый параметр)


получается непредсказуемый результат

Когда входной параметр типа PChar и результат передается по ссылке - все нормально

Подскажите пожалуйста в чем дело и как правильно написать код DLL
и определение внешней функции

Заранее благодарен, Роман


 
Digitman   (2002-04-27 10:10) [1]

Абсолютно все параметры в IB UDF передаются по ссылкам. Причем ссылкам не на оригинальные значения передаваемых параметров в вызывающем коде, а на их временные копии, создаваемые IB BLR в ходе подготовки к вызову UDF. После возврата из UDF копии уничтожаются ПОСЛЕ приема результата. Если результат UDF также возвращается по ссылке, и эта ссылка приравнять к ссылке на один из переданных в UDF при ее вызове параметров, то можно (с определенной осторожностью, дабы не выйти за границы блока памяти врем.вх.параметра) возвращать доп.результат работы UDF и через область памяти, отведенную IB BLR под тот самый временный вх.параметр.
Это надо затвердить себе как "отче наш", иначе будут бесконечные проблемы с падением IB-сервера.

пример объявления UDF в Делфи :

function MyFunc(var Par1: Integer; var Par2: Double; Par3: Pointer): Integer; cdecl;


 
Digitman   (2002-04-27 10:14) [2]

Абсолютно все параметры в IB UDF передаются по ссылкам. Причем ссылкам не на оригинальные значения передаваемых параметров в вызывающем коде, а на их временные копии, создаваемые IB BLR в ходе подготовки к вызову UDF. После возврата из UDF копии уничтожаются ПОСЛЕ приема результата. Если результат UDF также возвращается по ссылке, и эта ссылку в теле UDF приравнять к ссылке на один из переданных в UDF при ее вызове параметров, то можно (с определенной осторожностью, дабы не выйти за границы блока памяти врем.вх.параметра) возвращать доп.результат работы UDF и через область памяти, отведенную IB BLR под тот самый временный вх.параметр (чтобы явно не выделять память под результат, если того требует логика UDF).
Это надо затвердить себе как "отче наш", иначе будут бесконечные проблемы с падением IB-сервера.

пример объявления UDF в Делфи :

function MyFunc(var Par1: Integer; var Par2: Double; Par3: Pointer): Integer; cdecl;



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

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

Наверх




Память: 0.45 MB
Время: 0.006 c
1-73288
Ivan Kohut
2002-05-11 15:18
2002.05.23
Вопрос о броузере.


1-73238
IronHawk
2002-05-09 01:05
2002.05.23
Приветствую Мастеров! Очень нужная задача, есть.


1-73169
aaZ
2002-05-04 18:33
2002.05.23
TEdit


14-73385
SteBystep
2002-04-16 15:08
2002.05.23
PDF extract


1-73096
krion_
2002-05-12 15:55
2002.05.23
Как в StringGrid организовать свою прокрутку.





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