Russian Qt Forum

Программирование => С/C++ => Тема начата: zoro86 от Июня 15, 2010, 09:38



Название: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char*...
Отправлено: zoro86 от Июня 15, 2010, 09:38
Мне тут один товарищ код подбросил...
Код:
qint32 connectGPRS(QString login, QString pwd,QString connectionName)
{
    RASDIALPARAMS RDP;
    HRASCONN HRC = NULL;

    RDP.dwSize=sizeof(RDP);
    [color=red]_tcscpy(RDP.szEntryName,QStringToTCHAR(connectionName));[/color]
    int Pass;
    int res=RasGetEntryDialParams(NULL,&RDP,&Pass);
    if (res!=ERROR_SUCCESS)
    {
        return -1;
    }
    else
    {
       [color=red] _tcscpy(RDP.szUserName,QStringToTCHAR(login));
        _tcscpy(RDP.szPassword,QStringToTCHAR(pwd));[/color]
        RDP.dwSize=sizeof(RDP);
        qDebug()<<QString("connectGPRS: user: %1").arg(TCHARToQString(RDP.szUserName));
        res=RasDial(0,0,&RDP,0,0,&HRC);
        if (res!=ERROR_SUCCESS)
        {
            qDebug()<<QString("Error RasDial: %1").arg(res);
            return -1;
        }
        else
        {
            qDebug()<<QString("RasDial: OK%1").arg((qint32)HRC);
            return 1;
        }
    }
    return 1;
}

Оно подымает ppp соединение...
имеется еще вот такое включение и объявление..

Код:
#include <iostream>

using namespace std;
#ifdef Q_OS_WIN32
    #include "windows.h"
    #include "wingdi.h"
    #include "winuser.h"
    #include "psapi.h"
    #include "winsvc.h"
    #include "shellapi.h"
    #include "ras.h"
    #include "tchar.h"
    #include "raserror.h"
    #include "rasdlg.h"
    #include "winreg.h"
#else
#endif

#ifdef UNICODE
    #define QStringToTCHAR(x)     (wchar_t*) x.utf16()
    #define PQStringToTCHAR(x)    (wchar_t*) x->utf16()
    #define TCHARToQString(x)     QString::fromUtf16((ushort*)(x))
    #define TCHARToQStringN(x,y)  QString::fromUtf16((ushort*)(x),(y))
#else
    #define QStringToTCHAR(x)     x.local8Bit().constData()
    #define PQStringToTCHAR(x)    x->local8Bit().constData()
    #define TCHARToQString(x)     QString::fromLocal8Bit((x))
    #define TCHARToQStringN(x,y)  QString::fromLocal8Bit((x),(y))
#endif /*UNICODE*/

так вот почему то при компиляции в строках выделенных красным цветом выдает..

Код:
modules\classes\mainwindow.cpp:141: error: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'
modules\classes\mainwindow.cpp:150: error: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'
modules\classes\mainwindow.cpp:151: error: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'

что подскажите... ???


Название: Re: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char*...
Отправлено: Dendy от Июня 15, 2010, 10:24
При компиляции заголовочника стоит макрос UNICODE, а при компиляции mainwindow.cpp - нет. Ищите кто его удаляет. А вообще я бы рекомендовал удалить макрос UNICODE везде в проекте и в коде и явно пользоваться Wide-функциями WinAPI:

Код
C++ (Qt)
RASDIALPARAMSW RDP;
RDP.dwSize = sizeof(RDP);
wcscpy( RDP.szEntryName, (const wchar_t*)connectionName.utf16() );
 


Название: Re: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char*...
Отправлено: kuzulis от Июня 15, 2010, 11:23
zoro86,

См. в исходниках Qt (поискам) макрос QT_WA и посмотри как с его используют для этих целей и т.п. Думаю разберешься.


Название: Re: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char*...
Отправлено: Dendy от Июня 15, 2010, 11:53
См. в исходниках Qt (поискам) макрос QT_WA и посмотри как с его используют для этих целей и т.п.

Уже никак не используют, с версии 4.6 удалили и правильно сделали. Условная компиляция ASCII/Unicode - это костыль для программ десятилетней давности, написанных на WinAPI. В новых программах этим недоразумением продолжают пользоваться разве что школьники, изучающие программирование.


Название: Re: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char*...
Отправлено: kuzulis от Июня 15, 2010, 13:03
Цитировать
Уже никак не используют, с версии 4.6 удалили и правильно сделали.

Опаньки, эт я отстал от жизни!


Название: Re: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char*...
Отправлено: G-virus от Июня 17, 2010, 01:16
Попробуйте в проекте сделать
Код
C++ (Qt)
#undef UNICODE
 


Название: Re: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char*...
Отправлено: zoro86 от Июня 17, 2010, 07:16
Да спасибо работает и так и так... в обоих вариантах... Dendy, G-virus, kuzulis спасибо... :)