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

Вниз

Как перевести из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.016 c
15-1146148622
oldman
2006-04-27 18:37
2006.05.21
Праздник. так уж праздник... :(


2-1146730834
Alex7
2006-05-04 12:20
2006.05.21
Обработка EDataBaseError


3-1142417365
flad
2006-03-15 13:09
2006.05.21
iBase 7.5 -> 6.0


15-1145943960
Alkid
2006-04-25 09:46
2006.05.21
С Днём Рождения! 25 апреля


15-1145885422
Piter
2006-04-24 17:30
2006.05.21
Перестал работать поиск контактов в ICQ





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