C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
nujna pomosh s Memo char* i wchar_t*, Vopros k soobshestvu CBilderov
VainahskiyPapa
  Отправлено: 12.08.2003, 12:10


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Привет всем.
проблема такая — писал под сями чистыми прогу, которая возвращает char *, под сями работает прекрасно все возвращает находит и пр. и пр. и к стати принимает в аргументы две переменные одна из низ char*. В этот аргумент закидываю strch=Memo1->Lines->GetText() и передаю strch в эту функцию (уже перенесенную в Билдер со всеми изменениями типа __fastcall...) — по идее она у меня раньше выдавала char* (=FNAME (напр.)) ровно и чисто а теперь выдает следующее FNAMЕс_string — а когда начинаю конвертить в wchar_t* и потом в WideCharToString передаю в Memo2->Lines->Strings[j] вообще вопросики выдает или еще какую билеберду типа: ????||??.

Кратко:А вообще мне нужно следующее:
взять из Мемо одну строку преобразовать в char* отправить на обработку в мою функцию и return value (char*) записать нормально в Memo безо всяких там c_string и вопросиков.

Спасибо заранее.
Если что програмку могу вставить.

-----------------------------------------------------------------------------------------------

void __fastcall TsrchFrm::TxtToDb()
{
AnsiString SFile = "c:\\test.txt";
Memo1->Lines->LoadFromFile(SFile);
const int num_lines = Memo1->Lines->Count;
const int num_fields=10;

char* FNms[10];
FNms[1]="FNAME";
FNms[2]="SNAME";
FNms[3]="LNAME";
FNms[4]="ACCNO";
FNms[5]="TELNO";
FNms[6]="FAX";
FNms[7]="RNN";
FNms[8]="SID";
FNms[9]="STATUS";
FNms[0]="ID";

int count=0, Tabs[num_fields]={0};
char* (*A)[num_fields] = new char*[num_lines][num_fields];
int NStr[num_fields];
char* strch;
wchar_t * wctmp;
char* tmp;
int tabs_tmp;
for (int i=0; i for (int j=0; j Memo2->Lines->Strings[0]=Memo1->Lines->Strings[j];
strch=Memo2->Lines->GetText();
if((tabs_tmp=fndstr(strch, FNms[i], 0))!=(-1))
{
Tabs[i]=tabs_tmp;
NStr[i]=j;
goto B;
}
}B:}
/*for (int i=0; i for (int j=0; j {
Memo2->Lines->Strings[0]=Memo1->Lines->Strings[NStr[j]+i];
strch=Memo2->Lines->GetText();
//Memo1->Lines->Strings[j]=Tabs[j];
tmp=getText(strch, Tabs[j]);
ShowMessage(strch);
A[i][j]=tmp;
wctmp=(wchar_t *)tmp;
Memo3->Lines->Strings[i]=WideCharToString(wctmp);
} */
Memo2->Lines->Strings[0]=Memo1->Lines->Strings[NStr[1]];
ShowMessage(Memo2->Lines->Strings[0]);
strch=Memo2->Lines->GetText();
tmp=getText(strch, Tabs[1]);
ShowMessage(Tabs[1]);
ShowMessage(strlen(tmp));
Memo3->Lines->Strings[0]=WideCharToString((wchar_t*)strch);
}
//function searches for the word in string given and returns the position in tabs

int __fastcall TsrchFrm::fndstr(string str, string s, int pos)
{
int tabs=0, eq_count=0;
bool equal=false;


for (int i=pos; i {

if (str[i]=='\t') tabs++;
if (str[i]==s[0]){ eq_count++; if (s.length()==1) goto B; if (((s.length()-1)+i)>(str.length()-1)) break;
for (int j=1, k=(i+1); j<(s.length()); j++, k++)
{
if (str[k]==s[j]) {equal=true; eq_count++; if (eq_count==s.length()) {goto B;} }
else {equal=false; goto A;}
}}
A:}
B:
if (equal==false) {return (-1);}
else if (equal==true) {return tabs;}
}

//function for getting text from the string depending on tabulation count
char* __fastcall TsrchFrm::getText(char* str, int tabs)
{

char* tmp="";
int eq_count=0, pos=0;

for (int k=0; k<(strlen(str)); k++)
{

if (eq_count==tabs){
for (int t=k, i=0; i<(strlen(str)); t++, i++)
{
if (str[t]=='\t') {goto A;}
else { tmp[i]=str[t]; if (i==(strlen(str)-1)) goto A;
}
}
}

if (str[k]==('\t'))
{
eq_count++;
}
}

A:
return tmp;
}
SEDEGOFF
Отправлено: 12.08.2003, 12:21


Ученик-кочегар

Группа: Участник
Сообщений: 19



Ну вообще я в DLL делал передачу так
String h = load(Memo1->Text.c_str());
Георгий
Отправлено: 12.08.2003, 15:22


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Лучше AnsiString`ом пользуйся — у него есть нужные тебе методы c_str() и WideChar(...), а то я боюсь, что тебе вернули в strch=Memo2->Lines->GetText() адрес строки, хранящейся во временном объекте, который сразу же был уничтожен...

Вернуться в Вопросы программирования в C++Builder