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

Вниз

получить результат из dll   Найти похожие ветки 

 
dim- ©   (2004-05-18 09:58) [0]

var getPassw:function(var user:pchar;var passw:pchar):pchar stdcall;
когда вызываю ее "strin:=getPassw(pchar(users),pchar(pasw));" она ругается что "Constant object cannot be passed as var parameter"
в чем ошибка?


 
Reindeer Moss Eater ©   (2004-05-18 10:07) [1]

В способе передачи параметров.
Компилятор же тебе уже все сказал


 
PVOzerski ©   (2004-05-18 10:34) [2]

>(var user:pchar;var passw:pchar)
Обрати внимание на эти var"ы. Они, вообще-то означают, что в ходе работы функции может быть изменено значение самих указателей. То есть, что будут переданы фактически не сами указатели, а указатели на них. Это называется "передача по ссылке". Код сгенерится примерно такой же, как для
type
ppchar=^pchar;
var getPassw:function(user:ppchar;passw:ppchar):pchar stdcall;

Понятно, что строковую константу, например, если параметр дан как var pchar, не передать. Подозреваю, что и результат конверсии string в pchar - тоже. Теперь вопрос: а действительно ли по логике работы функции параметры надо передавать именно по ссылке?


 
Reindeer Moss Eater ©   (2004-05-18 10:37) [3]

Если в DLL с переданными переметрами делается StrAlloc, то почему бы и нет?


 
PVOzerski ©   (2004-05-18 10:49) [4]

>Если в DLL с переданными переметрами делается StrAlloc, то почему бы и нет?
Потому что лучше так не делать. Если менеджер кучи у exe и dll общий (напр., ShareMem), проще использовать строки, а если они разные, то сами понимаете...


 
Reindeer Moss Eater ©   (2004-05-18 11:02) [5]

StrAlloc была приведена как частный пример.
DLL ведь может написана не на D и создавать Windows строку c нулевым терминатором, используя переданный PChar.
И интерфесное описание в виде var MyString : PChar вполне уместно


 
dim- ©   (2004-05-19 01:37) [6]

Так все-таки, можно передавать переменную через var или нет.
Мне необходимо вернуть из длл несколько значений


 
Reindeer Moss Eater ©   (2004-05-19 08:55) [7]

Не можно, а нужно.
А ты - не передаешь.


 
Digitman ©   (2004-05-19 09:22) [8]

в ДЛЛ :
function GetPassw (user, passw: pchar; MemMgr: PMemoryManager): PChar; stdcall;
begin
 ...

 Result := MemMgr.GetMem(..);
 try
 ...
 except
   MemMgr.FreeMem(Result);
   Result := nil;
 end;
end;

/////////////////////

в вызывающем коде :
type
TGetPassw = function (user, passw: pchar; MemMgr: PMemoryManager): PChar; stdcall;

var
MyMemMgr: TMemoryManager;
GetPassw: TGetPassw;
..

MyMemMgr.GetMem := @MyGetMem;
MyMemMgr.ReallocMem := @MyReallocMem;
MyMemMgr.FreeMem := @MyFreeMem;

strin:=GetPassw(pchar(users),pchar(pasw), @MyMemMgr);
if Assigned(strin) then
try
..
finally
 MyMemMgr.FreeMem(strin);
end;



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

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

Наверх




Память: 0.46 MB
Время: 0.037 c
3-1083604739
@Igor
2004-05-03 21:18
2004.05.30
Как создать БД на сервере(MySQL)


9-1075157489
Rewriter
2004-01-27 01:51
2004.05.30
PowerDraw и Alt+Tab и восстановление изображения (3d[Power] плз)


14-1084050627
Petr V. Abramov
2004-05-09 01:10
2004.05.30
Про семафоры


14-1083914781
Гарри Поттер
2004-05-07 11:26
2004.05.30
Коммерческая конференция - имеет право на жизнь? Ваше мнение?


9-1074963842
-=DJ=-
2004-01-24 20:04
2004.05.30
НУЖЕН специалист (или хотя бы знающий) OpenGL в Delphi





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