Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
1-77948
Мефодий
2003-07-09 21:15
2003.07.24
Проблема с кириллицей в контролах на Windows XP


9-77704
Antichacker
2003-01-31 10:21
2003.07.24
Существует ли какая-либо документация по GLScene?(Eng)


7-78166
Maverick
2003-05-14 09:38
2003.07.24
Печать на плоттер


3-77725
boka
2003-06-27 09:24
2003.07.24
Как из txt перебросить данные в dbf


1-77896
Skier
2003-07-11 12:54
2003.07.24
Left side cannot be assigned to