Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как перевести из string в shortString [D6]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо