Текущий архив: 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.53 MB
Время: 0.012 c