Перейти к содержанию
    

Ошибка компиляции

Никак не пойму почему не хочет собиратся проэкт, уже перерыл весь MSDN.

// 1.cpp : Defines the entry point for the console application.
//

#include <stdafx.h>
#include "targetver.h"

#include <iostream>

#include <windows.h>

//#include <winbase.h>

//-----------------------
using namespace std;  // for <iostream>

char quit; 

static char* sysdev[] = {
    "COM1:",
    "COM2:",
    "COM3:",
    "COM4:",
    NULL
};



HANDLE  hPort;
//------------------------


//SerialPort system_port;


int _tmain(int argc, _TCHAR* argv[])
{

    
    

//------------------------------------------------------------------------------   
      // Open the serial port.//lpszPortName

    
    hPort=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);



    
    cout << "configurator V.0.0.1a" << endl;


    quit = '\0';
    
    while(quit != 'q')
    {
        cin >> quit;
    }

    return 0;
}

 

 

ошибка

------ Build started: Project: 1, Configuration: Debug Win32 ------

Compiling...

1.cpp

e:\documents and settings\kornilov\мои документы\visual studio 2008\projects\mainwork\1\1\1.cpp(56) : error C2664: 'CreateFileW' : cannot convert parameter 1 from 'const char [5]' to 'LPCWSTR'

Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Build log was saved at "file://e:\Documents and Settings\KoRniloV\Мои документы\Visual Studio 2008\Projects\mainWORK\1\1\Debug\BuildLog.htm"

1 - 1 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

 

 

что самое интересное пробовал тотже самое на другом компиляторе DEV-C++4.9 собирается нормально ?

Изменено пользователем west329_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте

 

hPort=CreateFile((LPCWSTR)"COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно добавить приставку L к строковым литералам (L"COM2") или в настройках проекта отключить использование Unicode.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогло.

Приведу весь код, но компорт не открывается а вылетает на первой функции CreateFile.

Может опять таки есть какието нюансы ?

 

Опятьже этот код работает номально под DEV-C++, аж до последней функции ReadFile, с ней я ещё не разобрался а так вкинул для опытов, но мне больше нравится visual выт и пытаюсь на него перейти.

 

 

 

 // 1.cpp : Defines the entry point for the console application.
//

#include <stdafx.h>
#include "targetver.h"

#include <iostream>

#include <windows.h>

//#include <winbase.h>

//-----------------------
using namespace std;  // for <iostream>


char quit; 

static char* sysdev[] = {
    "COM1:",
    "COM2:",
    "COM3:",
    "COM4:",
    NULL
};



HANDLE  hCom;
DCB ComDCM;
//------------------------


//SerialPort system_port; 


int _tmain(int argc, _TCHAR* argv[])
{

//CreateFile
//------------------------------------------------------------------------------   
         hCom = CreateFile(     (LPCWSTR)sysdev[0], 
                                GENERIC_READ | GENERIC_WRITE, 
                                0, 
                                NULL, 
                                OPEN_EXISTING, 
                                FILE_ATTRIBUTE_NORMAL, 
                                NULL);
   
   if(hCom==INVALID_HANDLE_VALUE)
    {
    cout << "Serial port open ERROR" << endl;
    CloseHandle(hCom);
    return !0;
   }
   else
    cout << "Serial port open OK" << endl;
    
    //MsgBox(NULL,"Нормально открыт последовательный порт","Error",MB_OK);
   
   
        memset(&ComDCM,0,sizeof(ComDCM));
        
        ComDCM.DCBlength = sizeof(DCB);






//GetCommState        
//------------------------------------------------------------------------------        
        if ( !GetCommState(hCom, &ComDCM) )
           {
            cout << "Serial port read param ERROR" << endl;                        
            CloseHandle(hCom);
            return !0;
           }
        else
            cout << "Serial port read param OK" << endl;        
        
    //cout << "--- GetCommState ---" << endl;
    //cout << "BaudRate" << &ComDCM.BaudRate << endl;
    //cout << &ComDCM.ByteSize << endl;
    //cout << &ComDCM.Parity << endl;        
        
        
        
        
        
        
        
        
        ComDCM.BaudRate = DWORD(115200);
        ComDCM.ByteSize = 8;
        ComDCM.Parity = NOPARITY;
        ComDCM.StopBits = ONESTOPBIT;
        ComDCM.fAbortOnError = TRUE;
        ComDCM.fDtrControl = DTR_CONTROL_DISABLE;
        ComDCM.fRtsControl = RTS_CONTROL_DISABLE;
        ComDCM.fBinary = TRUE;
        ComDCM.fParity = FALSE;
        ComDCM.fInX = ComDCM.fOutX = FALSE;
        ComDCM.XonChar = 0;
        ComDCM.XoffChar = char(0xff);
        ComDCM.fErrorChar = FALSE;
        ComDCM.fNull = TRUE;       //игнорирование 0 байтов
        //ComDCM.fNull = FALSE;
        ComDCM.fOutxCtsFlow = FALSE;
        ComDCM.fOutxDsrFlow = FALSE;
        ComDCM.XonLim = 128;
        ComDCM.XoffLim = 128;





//SetCommState   
//------------------------------------------------------------------------------   
   if( !SetCommState(hCom, &ComDCM) ) 
   {
       cout << "Serial port write param ERROR" << endl;                        
       CloseHandle(hCom);
       return !0;
   }
   else
       cout << "Serial port write param OK" << endl;





//GetCommTimeouts   
//------------------------------------------------------------------------------

    COMMTIMEOUTS cto = {0};
                                                                                
       
    if( !GetCommTimeouts(hCom, &cto) )       
        {
         cout << "Serial port read timeouts ERROR" << endl;                        
         CloseHandle(hCom);
         return !0;
        }
    else
       cout << "Serial port read timeouts OK" << endl;
    
    
    //cout << "--- cto ---" << endl;
    //cout << &cto.ReadIntervalTimeout << endl;
    //cout << &cto.ReadTotalTimeoutConstant << endl;
    //cout << &cto.ReadTotalTimeoutMultiplier << endl;
    
    
    cto.ReadIntervalTimeout         = 10;
    cto.ReadTotalTimeoutConstant    = 10;
    cto.ReadTotalTimeoutMultiplier  = 10;


//SetCommTimeouts
//------------------------------------------------------------------------------
    if( !SetCommTimeouts(hCom, &cto) )
        {
         cout << "Serial port write timeouts ERROR" << endl;                        
         CloseHandle(hCom);
         return !0;
        }
    else
       cout << "Serial port write timeouts OK" << endl;
   
//WriteFile   
//------------------------------------------------------------------------------   

   char buffer[30];
   memset(buffer,0,sizeof(buffer));
   strcpy(buffer,"SAVE TO COM1");
   
   //test
    cout << &buffer[0] << endl;
   //
   
   
   DWORD sentBytes;

   if( !WriteFile(hCom, buffer, sizeof(buffer), &sentBytes, NULL) )       
      {
       cout << "Serial port write byte ERROR" << endl;                        
       CloseHandle(hCom);
       return !0;
   }
   else
       cout << "Serial port write byte OK" << endl;





//------------------------------------------------------------------------------
   char rxBUF[30];
   DWORD reciveBytes;

  while (reciveBytes > 0)
  ReadFile(hCom, &rxBUF, 1, &reciveBytes, NULL);


   //WriteFile(hCom, rxBUF, sizeof(rxBUF), &sentBytes, NULL);





//------------------------------------------------------------------------------

   char quit;  

    quit = '\0';
    while (quit != 'q')
    {    
         
  
        cout << "Press q to quit " << endl;
        cin >> quit;
    }
   
   
    CloseHandle(hCom);
    return 0;
}

 

п.с. to vanner не подскажите где точно это выключить, в настройках ничего похожего на Unicode не нашол.

Изменено пользователем west329_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(LPCWSTR)sysdev[0],

 

замените на

 (LPCWSTR)sysdev,

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(LPCWSTR)sysdev[0],

 

замените на

 (LPCWSTR)sysdev,

 

пробовал всёравно вылетает.

 

Исходник и ЕХЕ тут.

 

П.С. обясните мне как обращатся тогда к другим портам КОМ2 или КОМ3

прикрепил ещё этот же проекто токо собранный в DEV C++

1.rar

e_x_e.rar

Hello.rar

Изменено пользователем west329_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть два пути.

 

Первый, правильный (ИМХО) - перейти на unicode. Для этого:

1. Вместо char использовать _TCHAR

_TCHAR buff[_MAX_PATH]

2. Все строковые константы объявлять с помощью макроса _T()

_T("LPT write mode: %d")

3. Использовать IO функции с поддержкой unicode

_tprintf()

Либо писать сразу только для unicode, забив на попытки оставить обратную совместимость (сразу использовать wchar_t, wprintf, L"text string" и т.д.).

 

Второй, "чтобы заработало" - отключить unicode. Для этого:

1. В опциях проекта, в Configuration Properties, справа в разделе Project Defaults выставить Character Set как Multi-byte.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть два пути.

 

Первый, правильный (ИМХО) - перейти на unicode. Для этого:

1. Вместо char использовать _TCHAR

_TCHAR buff[_MAX_PATH]

2. Все строковые константы объявлять с помощью макроса _T()

_T("LPT write mode: %d")

3. Использовать IO функции с поддержкой unicode

_tprintf()

Либо писать сразу только для unicode, забив на попытки оставить обратную совместимость (сразу использовать wchar_t, wprintf, L"text string" и т.д.).

 

Второй, "чтобы заработало" - отключить unicode. Для этого:

1. В опциях проекта, в Configuration Properties, справа в разделе Project Defaults выставить Character Set как Multi-byte.

 

 

Нашол в настройках, но отключать не хочет функция не активна ?

post-30423-1220528976_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашол в настройках...

Неа, не нашОл, грамотей :) То что я указал надо искать в меню Project, там последнйи пункт - Properties.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неа, не нашОл, грамотей :) То что я указал надо искать в меню Project, там последнйи пункт - Properties.

 

Извеняйте с визуалом работаю неделю. Нашол выключил.

Порубал весь проект до следующего вида.

 

#include "stdafx.h"
#include <windows.h>
#include <iostream>

using namespace std;  // for <iostream>


static char* sysdev[] = {
    "COM1:",
    "COM2:",
    "COM3:",
    "COM4:",
    NULL
};

HANDLE  hCom;

int _tmain(int argc, _TCHAR* argv[])
{
    hCom = CreateFile(     (LPCWSTR)sysdev[0], 
                                GENERIC_READ | GENERIC_WRITE, 
                                0, 
                                NULL, 
                                OPEN_EXISTING, 
                                FILE_ATTRIBUTE_NORMAL, 
                                NULL);

    if(hCom==INVALID_HANDLE_VALUE)
        {
            cout << "Serial port open ERROR" << endl;
            //CloseHandle(hCom);
            //return !0;
        }
   else
            cout << "Serial port open OK" << endl;

while(1);


    return 0;
}

 

Ту ткните носом или в нос :). проще уже некуда Юнико выключеню программа запускается и пишет Serial port open ERROR. :help::help::help:

Изменено пользователем west329_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Двоеточие из имени порта удалить.

 

пробовал:

 

(LPCWSTR)"COM1:",

(LPCWSTR)"COM1",

(LPCWSTR)sysdev[0],

(LPCWSTR)sysdev.

 

ответ ERROR :laughing:

1.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и это безобразие:

(LPCWSTR)sysdev[0]

не оставить без внимания, ибо этот тупой typecast был изначально ошибкой. Он не нужен.

 

Com-порты обычно я открываю так: "\\\\.\\COM1".

Изменено пользователем SysRq

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пробовал:

 

(LPCWSTR)"COM1:",

(LPCWSTR)"COM1",

(LPCWSTR)sysdev[0],

(LPCWSTR)sysdev.

 

ответ ERROR :laughing:

 

 

 

нашон на просторах нета.

    hCom = CreateFile(     TEXT("COM1:"), 
                                GENERIC_READ | GENERIC_WRITE, 
                                0, 
                                NULL, 
                                OPEN_EXISTING, 
                                FILE_ATTRIBUTE_NORMAL, 
                                NULL);

 

заработало ? незнаю только почему :08:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

static wchar_t *sysdev[] = {

L"COM1:",

L"COM2:",

L"COM3:",

L"COM4:",

NULL

};

 

 

 

HANDLE hCom;

//---------

int _tmain(int argc, _TCHAR* argv[])

{

//------------------------------------------------------------------------------

// Open the serial port.//lpszPortName

 

hCom = CreateFile( sysdev[0],

GENERIC_READ | GENERIC_WRITE,

0,

NULL,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL,

NULL);

 

if(hCom==INVALID_HANDLE_VALUE)

{

cout << "Serial port open ERROR" << endl;

//CloseHandle(hCom);

//return !0;

}

else

cout << "Serial port open OK" << endl;

 

while(1);

 

 

return 0;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...