PDA

Показать полную графическую версию : [решено] Проблема с перекодировкой AnsiString in CHAR


vetal_dnepr
21-04-2008, 00:23
Добрый день! Может кто сталкивался с такой проблемой - необходимо перевисти введенную строку (строка около 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
vetal_dnepr, Не совсем по теме, но если не будет трудно, оформляй текст тегом [CODE]. Выделяешь код, и жмёшь кнопочку над полем ввода. Вот эту http://i029.radikal.ru/0804/39/282bf40e9a18.jpg

Drongo
21-04-2008, 14:17
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
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
pva, спасибо большое!!! пока проверить возможности нет, но уверен все будет работать!!!

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

vetal_dnepr
23-04-2008, 11:05
pva, Еще раз спасибо!!! Все отлично работает!!! :up




© OSzone.net 2001-2012