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

Вниз

Как перевести из string в shortString   Найти похожие ветки 

 
it_work ©   (2006-05-01 09:13) [0]

Пишу библиотеку.
В языке, на котором будет при программировании использоваться эта библиотека возможно передовать и принимать параметры только в shortString.
Как в delphi перевести string в shortString?


 
Virgo_Style ©   (2006-05-01 10:05) [1]

var S  : String;
   SS : ShortString;

begin
 S  := "SomeText";
 SS := S;


 
it_work ©   (2006-05-02 06:08) [2]

не катит.
у меня вызывается в библиотеке функция, котора возвращает результат в string. Если это значение присваивать параметру моей функции типа ShortString, то возникает исключение.


 
balepa ©   (2006-05-02 06:10) [3]


> it_work ©   (02.05.06 06:08) [2]

Покажи


 
it_work ©   (2006-05-02 06:33) [4]


> Покажи

Чего показать?
код?
Function READHEADERMAIL(var subjectmail: shortString): shortString; register;
....
msg:=tIDMessage.Create(nil);
...
Try
subjectmail:=Msg.Subject;
Except
 Result:="Error"#13"Не могу прочитать тему письма!";
end;
....


возвращает в результат сообщение об ошибке.


 
balepa ©   (2006-05-02 06:47) [5]

В каком месте и какая ошибка ?


 
balepa ©   (2006-05-02 06:49) [6]


> Пишу библиотеку.


DLL ?


 
it_work ©   (2006-05-02 06:53) [7]

Угу, пишу dll.
Именно при выполнении subjectmail:=Msg.Subject; возникает ошибка, в результате чего функция возвращает значение "Error"#13"Не могу прочитать тему письма!";


 
it_work ©   (2006-05-02 06:53) [8]

при компиляции ошибок нет


 
balepa ©   (2006-05-02 06:59) [9]

Читал что написано в коменте при создании пустого проекта DLL (ShareMem) ?


 
balepa ©   (2006-05-02 07:35) [10]

А какая всетаки ошибка ?


 
it_work ©   (2006-05-02 09:06) [11]

С этой ошибко йразобрался, теперь другая, подобная :))

Function READHEADERMAIL(var d1: shortString): shortString; register;
var ss: string;
....
msg:=tIDMessage.Create(nil);
...
Try
 ss:=DateToStr(Msg.Date);
 d1:=ss;
Except
   on E: Exception do
     begin MessageDlg(E.Message, mtInformation, [mbOk], 0);
     Result:="Error"; end;
end;
....

присвоение значения переменной ss происходит нормально, при присвоении значения переменной d1 выдает ошибку
Access violation at adress .... in module "....dll". Write of adress ....

И еще, по поводу первой ошибки:
результат возвращается в сабжект не весь, а только первое слово из строки, с чем может быть связано?
Пример сабжект имеет значение Test sub
в переменную subjectmail возвращается только Test


 
balepa ©   (2006-05-02 09:14) [12]


> it_work ©   (02.05.06 09:06) [11]


А у меня не выдает.
Уверен что при присвоении d1:=ss, а не при ss:=DateToStr(Msg.Date); ?

Как вызываем ?
FreeLibrary делаем ?


 
it_work ©   (2006-05-02 09:22) [13]

уверен, так как при коментировании d1:=ss; функция вызывается нормально.
Самое интересное, что при компиляции в делфях ошибки нет, но при вызове функции из библиотеки моей программы выдается такая ошибка.


 
it_work ©   (2006-05-02 09:22) [14]

зачем FreeLibrary ?
как вызывается из моего приложения?


 
balepa ©   (2006-05-02 09:32) [15]


> it_work ©   (02.05.06 09:22) [14]

Попробуй в DLL вместо ss:= DateToStr(msg.Date); поставить ss:= DateToStr(Now) у меня работает.
А отладчиком не пробовал пользоваться Run -> Attach to process


 
Гаврила ©   (2006-05-02 09:44) [16]

Отладчик есть для этого - прекрасно трассирует библиотеки
только не Run -> Attach to process
а
Run -> paremeters -> host application


 
it_work ©   (2006-05-02 09:47) [17]


> Попробуй в DLL вместо ss:= DateToStr(msg.Date); поставить
> ss:= DateToStr(Now) у меня работает.

Та же самая ерунда, ошибка вываливается именно при присвоении значения из ss в d1
А ты пробуешь просто в приложении или в dll?
В приложении и у меня работает :))


 
balepa ©   (2006-05-02 09:49) [18]


> 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) [19]


> Отладчик есть для этого - прекрасно трассирует библиотеки
> только не Run -> Attach to process
> а
> Run -> paremeters -> host application

не все так просто, в приложении в котором используется эта библиотека своих библиотек штук 40 и все функции переплетены как черти, просто так не отладишь :( поэтому мессаги и поставил


 
it_work ©   (2006-05-02 09:51) [20]


> В DLL
>
> function DD(var SS: ShortString): ShortString; register;
>
> var
>  S: String;
> begin
>  S:= DateToStr(Now);
>  SS:= s;
>  Result:= ss;
> end;


проверяешь значение самой функции или ss при вызове функции?


 
it_work ©   (2006-05-02 09:54) [21]

Бред какой-то, когда пихаю значение в result все нормально


 
balepa ©   (2006-05-02 10:03) [22]


> 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;


 
DiamondShark ©   (2006-05-02 12:52) [23]

Соглашения о вызовах в DLL и в приложении не попутаны, часом?


 
it_work ©   (2006-05-02 12:57) [24]

нет, так как остальные функции работают нормально и прямое присвоение значения типа d:="11" отрабатывает нормально


 
balepa ©   (2006-05-02 12:58) [25]


> it_work ©   (02.05.06 12:57) [24]

При чем тут остальные ?


 
DiamondShark ©   (2006-05-02 13:00) [26]

Всё-таки, по тексту проверь, а не по косвенным соображениям.


 
DiamondShark ©   (2006-05-02 13:03) [27]


>  прямое присвоение значения типа d:="11" отрабатывает нормально

А прямое присваивание
d:="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
?


 
DiamondShark ©   (2006-05-02 13:07) [28]

Т.к. у тебя var-параметр, проверь, имеет ли актуальный параметр достаточную длину, и не компилируется ли всё в режиме {$V-}

Выставь глобально {$V+} (Project options|Compiler|Strict var-strings) и сделай build all.


 
balepa ©   (2006-05-02 13:07) [29]


> DiamondShark ©   (02.05.06 13:03) [27]

У него d1:= DateToStr(Msg.Date) а там от силы 10 символов.


 
it_work ©   (2006-05-02 13:08) [30]


> >  прямое присвоение значения типа d:="11" отрабатывает
> нормально
>
> А прямое присваивание
> d:="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq  
> qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
> ?

у меня по тексту отправитель не длинная строка.
и ко всему моя функция возвращает результат типа ShortString, и что самое интересное присвоение result:=ss, где ss-string проходит нормально и без ошибок и возвращает правильно отправителя


 
DiamondShark ©   (2006-05-02 13:17) [31]


> balepa ©   (02.05.06 13:07) [29]

А я откуда знаю, что ему реально в параметре приходит?
Он же отладчиком пользоваться отказывается, тесты не хочет выполнять, текст проверять тоже не хочет...
А телепатор, всё-таки, не казённый, батарейки к нему дорогие...


> it_work ©   (02.05.06 13:08) [30]

А ты попробуй, всё-таки...
Или возьми, наконец, отладчик, перед вызовом функции присвой параметру какую-нибудь характерную строку, "12345678фывапр", например, поставь в начале функции брекпоинт, и посмотри, что тебе там по ссылке передалось...


 
DiamondShark ©   (2006-05-02 13:20) [32]

Ты понимаешь, что по симптомам -- у тебя по ссылке приходит какая-то фигня. От предложенных вариантов ты отбрыкиваешься.
Как тебе ещё помочь?


 
it_work ©   (2006-05-02 13:47) [33]


> Ты понимаешь, что по симптомам -- у тебя по ссылке приходит
> какая-то фигня. От предложенных вариантов ты отбрыкиваешься.
>
> Как тебе ещё помочь?

Да я понимаю и не отбрыкиваюсь, но суть, что присвоение результату функции проходит нормально, а параметру функции нет, присваивается одно и то же значение. тип результата функции и ее параметра один и тот же.


 
it_work ©   (2006-05-02 13:48) [34]

пока выкрутился тем, что разбил функцию на несколько и возвращаю значения через результат функции.
не удобно, но временно пойдет.
маленько освобожусь, попробую все варианты перерыть и  разобраться в ситуации.

а с кодировками почты кто-нить может помочь?



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

Текущий архив: 2006.05.21;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.04 c
2-1146563824
49 Cent
2006-05-02 13:57
2006.05.21
Проблема с прозрачной формой.


15-1145618178
megabyte-ceercop
2006-04-21 15:16
2006.05.21
Сравнить с похожими играми.


2-1146654488
De
2006-05-03 15:08
2006.05.21
Как грамотно написать?


15-1145868036
Looser
2006-04-24 12:40
2006.05.21
вопрос не по дельфи


15-1145828371
Mihurr
2006-04-24 01:39
2006.05.21
Хард инфа Продолжение)))