Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Проблема с перекодировкой AnsiString in CHAR (http://forum.oszone.net/showthread.php?t=105436)

vetal_dnepr 21-04-2008 00:23 785792

Проблема с перекодировкой AnsiString in CHAR
 
Добрый день! Может кто сталкивался с такой проблемой - необходимо перевисти введенную строку (строка около 50 символов) из AnsiString в CHAR для отправки по почте - есть 2 варианта:

1й вариант
char Q[] = "mailto:test@mail.ru?subject=TEMA&body=";
sprintf(Q,"mailto:test@mail.ru?subject=TEMA&body=%s",Edit5->Text);
ShellExecute(0,NULL,Q,NULL,NULL,SW_SHOWNORMAL);

2й вариант
AnsiString S1 = Edit->Text;
char* ch1= S1.c_str();
char S[]= "mailto:test@mail.ru?subject=TEMA&body=";
strcat(S,ch1);
ShellExecute(0,NULL,S,NULL,NULL,SW_SHOWNORMAL);

И в обоих вариантах - все номально - программа компилится, почта открывается, данные в письмо заносятся, а потом билдер начинает ругаться, программа вылетает
В Call Stack пишет:
7c90378b ntdll.RtlConvertUlongToLargeDispatcher +0x46
7c90eafa ntdll.KiUserExceptionDispatcher +0xe

МОЖЕТ КТО ЗНАЕТ КАК С ЭТИМ МОЖНО БОРОТЬСЯ И В ЧЕМ ПРИЧИНА???
Всем откликнувшимся - большое спасибо!!!!

Drongo 21-04-2008 13:57 786046

vetal_dnepr, Не совсем по теме, но если не будет трудно, оформляй текст тегом [code]. Выделяешь код, и жмёшь кнопочку над полем ввода. Вот эту

Drongo 21-04-2008 14:17 786054

vetal_dnepr, Вот, тут попробовал, вроде всё нормально, запускается для почты Outlook Express 6. Компилится нормально Borland C++ Builder 6. Но когда в Edit2 ввожу текст:
Код:

(Edit2) Текст сообщения отправляется в почтовую программу.
Тоесть добавляю вначале строку (Edit2), то компилится нормально, а когда жму кнопку Отправить с текстом вылетает в ошибку, и открывает дебаггер, но тем не менее почтовую программу запускает и все строки, что введены заносит в тело. Может вперемешку с англ нельзя писать русскими? Не знаю. Проэкт, который я делал по вашему коду, прилагаю, и то что у меня получилось. Может кто из более опытных подскажет больше... Но откомпиленная программа уже работает хорошо без ошибок.
Код:

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        AnsiString S1 = Edit1->Text;
        char* ch1= S1.c_str();
        char S[]= "mailto:test@mail.ru?subject=TEMA&body=";
        strcat(S,ch1);
        ShellExecute(0,NULL,S,NULL,NULL,SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        AnsiString S1 = Edit2->Text;
        char* ch1= S1.c_str();
        char S[]= "mailto:test@mail.ru?subject=TEMA&body=";
        strcat(S,ch1);
        ShellExecute(0,NULL,S,NULL,NULL,SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------


pva 21-04-2008 14:45 786073

Код:

AnsiString str("mailto:test@mail.ru?subject=TEMA&body=");
str += Edit5->Text;
ShellExecute(0, 0, str.c_str(), 0, 0,SW_SHOWNORMAL);

память обрабатывается на стороне вызывающего, засоров не должно быть

vetal_dnepr 22-04-2008 16:29 786853

pva, спасибо большое!!! пока проверить возможности нет, но уверен все будет работать!!!

Drongo, Обязательно учту! (я про выдерение кода)!!!

vetal_dnepr 23-04-2008 11:05 787341

pva, Еще раз спасибо!!! Все отлично работает!!! :up


Время: 03:07.

Время: 03:07.
© OSzone.net 2001-