Russian Qt Forum
Май 13, 2024, 00:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]Не получается запустить приложение  (Прочитано 4086 раз)
merke
Гость
« : Декабрь 26, 2010, 15:35 »

В общем решил написать pipe клиент/сервер на WinApi.
Нашел простой исходник, на MVS C++ компилится и запускается без проблем, а вот на Qt выдается ошибка:
Код:
cannot convert 'CHAR*' to 'const WCHAR*' for argument '1' to 'void* CreateNamedPipeW(const WCHAR*, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, _SECURITY_ATTRIBUTES*)'

вот сам код:
Код
C++ (Qt)
// ==================================================
// Приложение PIPES (серверное приложение)
// Демонстрация использования каналов Pipe
// для передачи данных между процессами
//
// (С) Фролов А.В., 1996
// Email: frolov@glas.apc.org
// ==================================================
 
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
int main()
{
 // Флаг успешного создания канала
 BOOL   fConnected;
 
 // Идентификатор канала Pipe
 HANDLE hNamedPipe;
 
 // Имя создаваемого канала Pipe
 LPSTR  lpszPipeName = "\\\\.\\pipe\\$MyPipe$";
 
 // Буфер для передачи данных через канал
 char   szBuf[512];
 
 // Количество байт данных, принятых через канал
 DWORD  cbRead;
 
 // Количество байт данных, переданных через канал
 DWORD  cbWritten;
 
 printf("Named pipe server demo\n"
   "(C) A. Frolov, 1996, Email: frolov@glas.apc.org\n");
 
 // Создаем канал Pipe, имеющий имя lpszPipeName
 hNamedPipe = CreateNamedPipe(
   lpszPipeName,
   PIPE_ACCESS_DUPLEX,
   PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
   PIPE_UNLIMITED_INSTANCES,
   512, 512, 5000, NULL);
 
 // Если возникла ошибка, выводим ее код и зваершаем
 // работу приложения
 if(hNamedPipe == INVALID_HANDLE_VALUE)
 {
   fprintf(stdout,"CreateNamedPipe: Error %ld\n",
     GetLastError());
   getch();
   return 0;
 }
 
 // Выводим сообщение о начале процесса создания канала
 fprintf(stdout,"Waiting for connect...\n");
 
 // Ожидаем соединения со стороны клиента
 fConnected = ConnectNamedPipe(hNamedPipe, NULL);
 
 // При возникновении ошибки выводим ее код
 if(!fConnected)
 {
   switch(GetLastError())
   {
     case ERROR_NO_DATA:
       fprintf(stdout,"ConnectNamedPipe: ERROR_NO_DATA");
       getch();
       CloseHandle(hNamedPipe);
       return 0;
     break;
 
     case ERROR_PIPE_CONNECTED:
       fprintf(stdout,
         "ConnectNamedPipe: ERROR_PIPE_CONNECTED");
       getch();
       CloseHandle(hNamedPipe);
       return 0;
     break;
 
     case ERROR_PIPE_LISTENING:
       fprintf(stdout,
         "ConnectNamedPipe: ERROR_PIPE_LISTENING");
       getch();
       CloseHandle(hNamedPipe);
       return 0;
     break;
 
     case ERROR_CALL_NOT_IMPLEMENTED:
       fprintf(stdout,
          "ConnectNamedPipe: ERROR_CALL_NOT_IMPLEMENTED");
       getch();
       CloseHandle(hNamedPipe);
       return 0;
     break;
 
     default:
       fprintf(stdout,"ConnectNamedPipe: Error %ld\n",
         GetLastError());
       getch();
       CloseHandle(hNamedPipe);
       return 0;
     break;
 
   }
 
   CloseHandle(hNamedPipe);
   getch();
   return 0;
 }
 
 // Выводим сообщение об успешном создании канала
 fprintf(stdout,"\nConnected. Waiting for command...\n");
 
 // Цикл получения команд через канал
 while(1)
 {
   // Получаем очередную команду через канал Pipe
   if(ReadFile(hNamedPipe, szBuf, 512, &cbRead, NULL))
   {
     // Посылаем эту команду обратно клиентскому
     // приложению
     if(!WriteFile(hNamedPipe, szBuf, strlen(szBuf) + 1,
       &cbWritten, NULL))
       break;
 
     // Выводим принятую команду на консоль
     printf("Received: <%s>\n", szBuf);
 
     // Если пришла команда "exit",
     // завершаем работу приложения
     if(!strcmp(szBuf, "exit"))
       break;
   }
   else
   {
     //fprintf(stdout,"ReadFile: Error %ld\n",330033, GetLastError());
     getch();
     break;
   }
 }
 
 CloseHandle(hNamedPipe);
 return 0;
}

не могу понять в чем дело(((
« Последнее редактирование: Декабрь 26, 2010, 16:41 от Александр » Записан
UVV
Гость
« Ответ #1 : Декабрь 26, 2010, 16:15 »

Не пиши на winapi
Записан
merke
Гость
« Ответ #2 : Декабрь 26, 2010, 16:17 »

UVV, огромное тебе спасибо!!! Смеющийся

Ты мне открыл глаза на мир!!! Как же я не мог раньше до этого догодаться!!!

Давайте не будем флудить!
Записан
merke
Гость
« Ответ #3 : Декабрь 26, 2010, 16:41 »

Решил проблему вот так:

Код:
#undef UNICODE
Записан
brankovic
Гость
« Ответ #4 : Декабрь 26, 2010, 18:04 »

Код:
#undef UNICODE

расскажете потом, если глюки интересные будут.

Я бы пошёл навстречу компилятору:

Код:
const WCHAR* lpszPipeName = L"\\\\.\\pipe\\$MyPipe$";

но не особо уверен, WCHAR стороной обходил всегда.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.085 секунд. Запросов: 20.