реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Ошибка компиляции, Visual C++ 2008
west329_
сообщение Sep 4 2008, 08:42
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Никак не пойму почему не хочет собиратся проэкт, уже перерыл весь 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_ - Sep 4 2008, 08:42
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Sep 4 2008, 08:50
Сообщение #2


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Попробуйте

Код
hPort=CreateFile((LPCWSTR)"COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
Go to the top of the page
 
+Quote Post
vanner
сообщение Sep 4 2008, 08:57
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 23-10-05
Пользователь №: 10 016



Нужно добавить приставку L к строковым литералам (L"COM2") или в настройках проекта отключить использование Unicode.
Go to the top of the page
 
+Quote Post
west329_
сообщение Sep 4 2008, 10:43
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Помогло.
Приведу весь код, но компорт не открывается а вылетает на первой функции 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_ - Sep 4 2008, 10:46
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Sep 4 2008, 10:53
Сообщение #5


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Код
(LPCWSTR)sysdev[0],


замените на
Код
(LPCWSTR)sysdev,
Go to the top of the page
 
+Quote Post
west329_
сообщение Sep 4 2008, 11:08
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Цитата(jorikdima @ Sep 4 2008, 13:53) *
Код
(LPCWSTR)sysdev[0],


замените на
Код
(LPCWSTR)sysdev,


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

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

П.С. обясните мне как обращатся тогда к другим портам КОМ2 или КОМ3
прикрепил ещё этот же проекто токо собранный в DEV C++

Сообщение отредактировал west329_ - Sep 4 2008, 11:18
Прикрепленные файлы
Прикрепленный файл  1.rar ( 623.05 килобайт ) Кол-во скачиваний: 37
Прикрепленный файл  e_x_e.rar ( 10.28 килобайт ) Кол-во скачиваний: 41
Прикрепленный файл  Hello.rar ( 105.92 килобайт ) Кол-во скачиваний: 39
 
Go to the top of the page
 
+Quote Post
SysRq
сообщение Sep 4 2008, 11:30
Сообщение #7


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



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

Первый, правильный (ИМХО) - перейти на 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.
Go to the top of the page
 
+Quote Post
west329_
сообщение Sep 4 2008, 11:50
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Цитата(SysRq @ Sep 4 2008, 14:30) *
Есть два пути.

Первый, правильный (ИМХО) - перейти на 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.



Нашол в настройках, но отключать не хочет функция не активна ?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
SysRq
сообщение Sep 4 2008, 12:22
Сообщение #9


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(west329_ @ Sep 4 2008, 15:50) *
Нашол в настройках...

Неа, не нашОл, грамотей smile.gif То что я указал надо искать в меню Project, там последнйи пункт - Properties.
Go to the top of the page
 
+Quote Post
west329_
сообщение Sep 4 2008, 12:47
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Цитата(SysRq @ Sep 4 2008, 15:22) *
Неа, не нашОл, грамотей smile.gif То что я указал надо искать в меню 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;
}


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

Сообщение отредактировал west329_ - Sep 4 2008, 12:48
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Sep 4 2008, 13:00
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Двоеточие из имени порта удалить.
Go to the top of the page
 
+Quote Post
west329_
сообщение Sep 4 2008, 13:11
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Цитата(sergeeff @ Sep 4 2008, 16:00) *
Двоеточие из имени порта удалить.


пробовал:

(LPCWSTR)"COM1:",
(LPCWSTR)"COM1",
(LPCWSTR)sysdev[0],
(LPCWSTR)sysdev.

ответ ERROR laughing.gif
Прикрепленные файлы
Прикрепленный файл  1.rar ( 9.59 килобайт ) Кол-во скачиваний: 35
 
Go to the top of the page
 
+Quote Post
SysRq
сообщение Sep 4 2008, 13:17
Сообщение #13


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Ну и это безобразие:
Код
(LPCWSTR)sysdev[0]
не оставить без внимания, ибо этот тупой typecast был изначально ошибкой. Он не нужен.

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

Сообщение отредактировал SysRq - Sep 4 2008, 13:18
Go to the top of the page
 
+Quote Post
west329_
сообщение Sep 4 2008, 13:31
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Цитата(west329_ @ Sep 4 2008, 16:11) *
пробовал:

(LPCWSTR)"COM1:",
(LPCWSTR)"COM1",
(LPCWSTR)sysdev[0],
(LPCWSTR)sysdev.

ответ ERROR laughing.gif




нашон на просторах нета.
Код
    hCom = CreateFile(     TEXT("COM1:"),
                                GENERIC_READ | GENERIC_WRITE,
                                0,
                                NULL,
                                OPEN_EXISTING,
                                FILE_ATTRIBUTE_NORMAL,
                                NULL);


заработало ? незнаю только почему 08.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Sep 4 2008, 13:58
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



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;
}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th July 2025 - 23:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016