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

Вниз

Параметр в библиотечной процедуре...   Найти похожие ветки 

 
olookin   (2003-07-11 23:31) [0]

Мой вопрос таков - можно ли передавать в библиотечную процедуру параметр как var? И если да - то как это делается? А то у меня ошибка возникает.

Пример вызова подобной процедуры следующий:

//in dll
procedure MyProc(var s: string); register;
begin
s:="DLL";
end;

//in application
procedure MyProc(var s: string); external "mylib.dll"; register;

//пример вызова (сокращено немного)
procedure ButtonClick();
var s: string;
begin
MyProc(s);
//в отладчике s="DLL" - т.е. как и надо
showmessage(s); //здесь возникает ошибка EInvalidPointer
end;

Заранее спасибо...


 
Armen   (2003-07-12 02:17) [1]

Во первых string можно передавать толко если uses sharemem;

а так вместо var можно передавать указатель, это же тоже ссылка.


 
Германн   (2003-07-12 02:51) [2]

Я бы посоветовал, в меру сил и возможностей, избегать применения паскалевского типа string в dll. Если нет противопоказаний, используй тип PChar.


 
panov   (2003-07-12 03:35) [3]

При использовангии Sharemem строки можно совершенно спокойно использовать в проектах Delphi.


 
olookin   (2003-07-12 08:06) [4]

Так вот, во-первых (to Armen) ShareMem ставлю только в библиотеку... Когда я ставлю ShareMem и в проект тоже - возникает ошибка уже просто при запуске программы.

Во вторых - (to Германн и panov) ошибка EInvalidPointer возникает только тогда, когда я вызываю процедуру с параметром типа var (неважно, string это или integer например). Вызов процедуры вида MyProc(s: string); не вызывает ошибки вообще (но, понятно, и результата тоже нет).


 
Armen   (2003-07-12 17:38) [5]

>Когда я ставлю ShareMem и в проект тоже - возникает ошибка уже просто при запуске программы.

Это от того что у тебя var s: string, нужно без var-а.

Если хочешь передавать как var, то передай pointer!


 
Ihor Osov'yak   (2003-07-12 18:42) [6]

1. Можно
2. Как сказал Панов - при передачи var s:string - использование Sharemem обязательно.
3. Идиологически более правильно Германн © (12.07.03 02:51) - почему, это совсем отделный разговор. Хотя и при использовани PChar можно получить определенные проблемы, если не совсем осознавать, что делаем..

> ошибка EInvalidPointer возникает только тогда, когда я вызываю процедуру с параметром типа var (неважно, string это или integer например).

> Когда я ставлю ShareMem и в проект тоже - возникает ошибка уже просто при запуске программы.


Это наводит на мысль, что у тебя ошибка совершенно где-то в ином месте. И мы наблюдаешь последствия этой ошибки..


 
olookin   (2003-07-12 19:10) [7]

to Ihor Osov"yak - весь код приведен в примере. Есть там ошибка?


 
Cr@zy-EyE   (2003-07-12 19:17) [8]

У меня ошибка EInvalidPointer возникала только потому, что не было ШарМема в программе. Как сказал Armen (12.07.03 17:38), ты var убери, а ShareMem в проге все-таки поставь.


 
Ihor Osov'yak   (2003-07-12 19:24) [9]

Нет, не весь код. Непонятно, декларируешь ли ты sharemem.. Непонятно, какие опции компилятора, можно поставить ведь такие опции, что string в программе будет интерпритироваться как shortstring {$H–}.. А в dll будет по умолчанию, то есть {$H+}, и тогда string интерпритируется как AnsiString..

Да мало ли какие еще у тебя фортеля могут быть.. Посмотри отладчиком по
Ctrl_Alt_C - может чего и сообразишь..


 
Ihor Osov'yak   (2003-07-12 19:26) [10]


> ты var убери, а ShareMem в проге все-таки поставь

Вот ShareMem в программе и в длл поставь поначалу, а var - уже думай сам. Тебе, кажется, значение возвращать нужно? Так как ты без var обойдешся?



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

Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
14-78155
Wonder
2003-07-09 13:48
2003.07.24
По мотивам событий в Москве в Тушино


1-77861
Иосиф Сталин
2003-07-13 16:04
2003.07.24
Помогите с TMENUITEM


1-77983
Vasilii
2003-07-11 13:22
2003.07.24
двойная кнопка


14-78075
Кен
2003-07-07 07:24
2003.07.24
А есть ли в Дельфи стэк ? По аналогии с тем, что использует проце


1-77901
EvgeniyR
2003-07-14 07:48
2003.07.24
Отключение





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