Помогите разобраться с ShellExecute() !!!
От: Nvisa Россия  
Дата: 16.08.04 14:08
Оценка:
Помогите разобраться с использованием ShellExecute() для запуска стороннего приложения.

Задача следующая:

Есть таблица, в мемо-полях хранится список документов, в каждой строке — одна ссылка на документ.
Мемо-поля связаны с TDBMemo SH_EXTFILE.
Читаем в переменную AS одну из строк и проверяем на отсутствие пустоты.

HtmNumMax = SH_EXTFILE->Lines->Count;
if (HtmNumCurr > (HtmNumMax — 1) ) HtmNumCurr = HtmNumMax — 1;

AnsiString AS = " ";
if (HtmNumMax < 1 ) {
AS = RootDir + "\\Dbf\\Docs\\standart.htm";
} else {
AS = RootDir + SH_EXTFILE->Lines->Strings[HtmNumCurr];
};


Далее, при компилляции ShellExecute() выдается сообщение, что ожидается "const char" а имеется "AnsiString", и никак автоматом невозможно конвертонуть "AnsiString" в "const char".

if((UINT)ShellExecute(
NULL,
"open",
AS,
NULL,
NULL,
SW_SHOWNORMAL) <= 32)
{
// errors
}

К сожалению, я только начинаю изучать СИ, но достаточно хорошо знаю программирование в среде FoxPro, где все проблемы такого рода решаются автоматом, и вот возможно эти знания мне и клинят в разборках этой ошибки.
Если можно, помогите разобраться с конвертацией всяких строковых типов друг в друга, т.к. чувствую, что такого рода вопрос — не последний.

С уважением.
Виктор. Калининград.



16.08.04 18:12: Перенесено модератором из 'C/C++' — Odi$$ey
Re: Помогите разобраться с ShellExecute() !!!
От: maximilian Украина  
Дата: 16.08.04 14:15
Оценка:
Здравствуйте, Nvisa, Вы писали:

N>Далее, при компилляции ShellExecute() выдается сообщение, что ожидается "const char" а имеется "AnsiString", и никак автоматом невозможно конвертонуть "AnsiString" в "const char".


N> if((UINT)ShellExecute(

N> NULL,
N> "open",
N> AS,
N> NULL,
N> NULL,
N> SW_SHOWNORMAL) <= 32)
N> {
N> // errors
N> }

Вместо AS нужно написать AS.c_str()
Re: Помогите разобраться с ShellExecute() !!!
От: pigeon Великобритания
Дата: 16.08.04 14:33
Оценка:
Здравствуйте, Nvisa, Вы писали:

N>Помогите разобраться с использованием ShellExecute() для запуска стороннего приложения.


N>Задача следующая:


N>Есть таблица, в мемо-полях хранится список документов, в каждой строке — одна ссылка на документ.

N>Мемо-поля связаны с TDBMemo SH_EXTFILE.
N>Читаем в переменную AS одну из строк и проверяем на отсутствие пустоты.

N> HtmNumMax = SH_EXTFILE->Lines->Count;

N> if (HtmNumCurr > (HtmNumMax — 1) ) HtmNumCurr = HtmNumMax — 1;

N> AnsiString AS = " ";

N> if (HtmNumMax < 1 ) {
N> AS = RootDir + "\\Dbf\\Docs\\standart.htm";
N> } else {
N> AS = RootDir + SH_EXTFILE->Lines->Strings[HtmNumCurr];
N> };


N>Далее, при компилляции ShellExecute() выдается сообщение, что ожидается "const char" а имеется "AnsiString", и никак автоматом невозможно конвертонуть "AnsiString" в "const char".


N> if((UINT)ShellExecute(

N> NULL,
N> "open",
N> AS,
N> NULL,
N> NULL,
N> SW_SHOWNORMAL) <= 32)
N> {
N> // errors
N> }

N>К сожалению, я только начинаю изучать СИ, но достаточно хорошо знаю программирование в среде FoxPro, где все проблемы такого рода решаются автоматом, и вот возможно эти знания мне и клинят в разборках этой ошибки.

N>Если можно, помогите разобраться с конвертацией всяких строковых типов друг в друга, т.к. чувствую, что такого рода вопрос — не последний.

N>С уважением.

N>Виктор. Калининград.
В классе AnsiString есть ф-я c_str вернет вам const char*.
  if((UINT)ShellExecute(
    NULL,
    "open",
    AS.c_str(),
    NULL,
    NULL,
    SW_SHOWNORMAL) <= 32)
  {
    // errors
  }
... << RSDN@Home 1.1.4 @@subversion >>
Premature optimization is the root of all evil in programming. Donald Knuth
Re[2]: Помогите разобраться с ShellExecute() !!!
От: Nvisa Россия  
Дата: 16.08.04 16:45
Оценка:
Здравствуйте, maximilian, Вы писали:

M>Здравствуйте, Nvisa, Вы писали:


N>>Далее, при компилляции ShellExecute() выдается сообщение, что ожидается "const char" а имеется "AnsiString", и никак автоматом невозможно конвертонуть "AnsiString" в "const char".


N>> if((UINT)ShellExecute(

N>> NULL,
N>> "open",
N>> AS,
N>> NULL,
N>> NULL,
N>> SW_SHOWNORMAL) <= 32)
N>> {
N>> // errors
N>> }

M>Вместо AS нужно написать AS.c_str()



Максим, огромное спасибо, все заработало !!!
Такой оперативности в получении ответа я не ожидал — буквально пара минут!!!

Виктор.
Re[2]: Помогите разобраться с ShellExecute() !!!
От: Nvisa Россия  
Дата: 16.08.04 16:52
Оценка:
Здравствуйте, pigeon, Вы писали:

P>Здравствуйте, Nvisa, Вы писали:


N>>Помогите разобраться с использованием ShellExecute() для запуска стороннего приложения.


N>>Задача следующая:


N>>Есть таблица, в мемо-полях хранится список документов, в каждой строке — одна ссылка на документ.

N>>Мемо-поля связаны с TDBMemo SH_EXTFILE.
N>>Читаем в переменную AS одну из строк и проверяем на отсутствие пустоты.

N>> HtmNumMax = SH_EXTFILE->Lines->Count;

N>> if (HtmNumCurr > (HtmNumMax — 1) ) HtmNumCurr = HtmNumMax — 1;

N>> AnsiString AS = " ";

N>> if (HtmNumMax < 1 ) {
N>> AS = RootDir + "\\Dbf\\Docs\\standart.htm";
N>> } else {
N>> AS = RootDir + SH_EXTFILE->Lines->Strings[HtmNumCurr];
N>> };


N>>Далее, при компилляции ShellExecute() выдается сообщение, что ожидается "const char" а имеется "AnsiString", и никак автоматом невозможно конвертонуть "AnsiString" в "const char".


N>> if((UINT)ShellExecute(

N>> NULL,
N>> "open",
N>> AS,
N>> NULL,
N>> NULL,
N>> SW_SHOWNORMAL) <= 32)
N>> {
N>> // errors
N>> }

N>>К сожалению, я только начинаю изучать СИ, но достаточно хорошо знаю программирование в среде FoxPro, где все проблемы такого рода решаются автоматом, и вот возможно эти знания мне и клинят в разборках этой ошибки.

N>>Если можно, помогите разобраться с конвертацией всяких строковых типов друг в друга, т.к. чувствую, что такого рода вопрос — не последний.

N>>С уважением.

N>>Виктор. Калининград.
P>В классе AnsiString есть ф-я c_str вернет вам const char*.
P>
P>  if((UINT)ShellExecute(
P>    NULL,
P>    "open",
P>    AS.c_str(),
P>    NULL,
P>    NULL,
P>    SW_SHOWNORMAL) <= 32)
P>  {
P>    // errors
P>  }

P>

Огромное спасибо, все заработало !!!

Виктор.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.