![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как перевести из string в shortString [D6]
it_work © (2006-05-01 09:13:00)Пишу библиотеку.
В языке, на котором будет при программировании использоваться эта библиотека возможно передовать и принимать параметры только в shortString.
Как в delphi перевести string в shortString?
it_work (2006-05-02 13:48:00) [1]пока выкрутился тем, что разбил функцию на несколько и возвращаю значения через результат функции.
не удобно, но временно пойдет.
маленько освобожусь, попробую все варианты перерыть и разобраться в ситуации.
а с кодировками почты кто-нить может помочь?
it_work (2006-05-02 13:47:00) [2]
> Ты понимаешь, что по симптомам -- у тебя по ссылке приходит
> какая-то фигня. От предложенных вариантов ты отбрыкиваешься.
>
> Как тебе ещё помочь?
Да я понимаю и не отбрыкиваюсь, но суть, что присвоение результату функции проходит нормально, а параметру функции нет, присваивается одно и то же значение. тип результата функции и ее параметра один и тот же.
DiamondShark (2006-05-02 13:20:00) [3]Ты понимаешь, что по симптомам -- у тебя по ссылке приходит какая-то фигня. От предложенных вариантов ты отбрыкиваешься.
Как тебе ещё помочь?
DiamondShark (2006-05-02 13:17:00) [4]
> balepa © (02.05.06 13:07) [29]
А я откуда знаю, что ему реально в параметре приходит?
Он же отладчиком пользоваться отказывается, тесты не хочет выполнять, текст проверять тоже не хочет...
А телепатор, всё-таки, не казённый, батарейки к нему дорогие...
> it_work © (02.05.06 13:08) [30]
А ты попробуй, всё-таки...
Или возьми, наконец, отладчик, перед вызовом функции присвой параметру какую-нибудь характерную строку, '12345678фывапр', например, поставь в начале функции брекпоинт, и посмотри, что тебе там по ссылке передалось...
it_work (2006-05-02 13:08:00) [5]
> > прямое присвоение значения типа d:='11' отрабатывает
> нормально
>
> А прямое присваивание
> d:='qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
> qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'
> ?
у меня по тексту отправитель не длинная строка.
и ко всему моя функция возвращает результат типа ShortString, и что самое интересное присвоение result:=ss, где ss-string проходит нормально и без ошибок и возвращает правильно отправителя
balepa (2006-05-02 13:07:00) [6]
> DiamondShark © (02.05.06 13:03) [27]
У него d1:= DateToStr(Msg.Date) а там от силы 10 символов.
DiamondShark (2006-05-02 13:07:00) [7]Т.к. у тебя var-параметр, проверь, имеет ли актуальный параметр достаточную длину, и не компилируется ли всё в режиме {$V-}
Выставь глобально {$V+} (Project options|Compiler|Strict var-strings) и сделай build all.
DiamondShark (2006-05-02 13:03:00) [8]
> прямое присвоение значения типа d:='11' отрабатывает нормально
А прямое присваивание
d:='qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq'
?
DiamondShark (2006-05-02 13:00:00) [9]Всё-таки, по тексту проверь, а не по косвенным соображениям.
balepa (2006-05-02 12:58:00) [10]
> it_work © (02.05.06 12:57) [24]
При чем тут остальные ?
it_work (2006-05-02 12:57:00) [11]нет, так как остальные функции работают нормально и прямое присвоение значения типа d:='11' отрабатывает нормально
DiamondShark (2006-05-02 12:52:00) [12]Соглашения о вызовах в DLL и в приложении не попутаны, часом?
balepa (2006-05-02 10:03:00) [13]
> it_work © (02.05.06 09:51) [20]
procedure TForm1.Button1Click(Sender: TObject);
type
TFun = function(var dd: ShortString): ShortString;
var
h: Cardinal;
p: Pointer;
t: TFun;
d: shortstring;
begin
h:= LoadLibrary('DLL.DLL');
p:= GetProcAddress(h,'DD');
if p<>nil then begin
T:= P;
d:= 'ggg';
showmessage(T(d));
showmessage(d);
FreeLibrary(h);
end;
end;
it_work (2006-05-02 09:54:00) [14]Бред какой-то, когда пихаю значение в result все нормально
it_work (2006-05-02 09:51:00) [15]
> В DLL
>
> function DD(var SS: ShortString): ShortString; register;
>
> var
> S: String;
> begin
> S:= DateToStr(Now);
> SS:= s;
> Result:= ss;
> end;
проверяешь значение самой функции или ss при вызове функции?
balepa (2006-05-02 09:49:00) [16]
> it_work © (02.05.06 09:47) [17]
> А ты пробуешь просто в приложении или в dll?
В DLL
function DD(var SS: ShortString): ShortString; register;
var
S: String;
begin
S:= DateToStr(Now);
SS:= s;
Result:= ss;
end;
it_work (2006-05-02 09:49:00) [17]
> Отладчик есть для этого - прекрасно трассирует библиотеки
> только не Run -> Attach to process
> а
> Run -> paremeters -> host application
не все так просто, в приложении в котором используется эта библиотека своих библиотек штук 40 и все функции переплетены как черти, просто так не отладишь :( поэтому мессаги и поставил
it_work (2006-05-02 09:47:00) [18]
> Попробуй в DLL вместо ss:= DateToStr(msg.Date); поставить
> ss:= DateToStr(Now) у меня работает.
Та же самая ерунда, ошибка вываливается именно при присвоении значения из ss в d1
А ты пробуешь просто в приложении или в dll?
В приложении и у меня работает :))
Гаврила (2006-05-02 09:44:00) [19]Отладчик есть для этого - прекрасно трассирует библиотеки
только не Run -> Attach to process
а
Run -> paremeters -> host application
balepa (2006-05-02 09:32:00) [20]
> it_work © (02.05.06 09:22) [14]
Попробуй в DLL вместо ss:= DateToStr(msg.Date); поставить ss:= DateToStr(Now)у меня работает.
А отладчиком не пробовал пользоваться Run -> Attach to process