Russian Qt Forum
Января 18, 2025, 09:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: cannot convert 'WCHAR*' to 'char*' for argument '1' to 'char*...  (Прочитано 25154 раз)
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*)'

что подскажите... Непонимающий
Записан
Dendy
Гость
« Ответ #1 : Июня 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() );
 
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июня 15, 2010, 11:23 »

zoro86,

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

ArchLinux x86_64 / Win10 64 bit
Dendy
Гость
« Ответ #3 : Июня 15, 2010, 11:53 »

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

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

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Июня 15, 2010, 13:03 »

Цитировать
Уже никак не используют, с версии 4.6 удалили и правильно сделали.

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

ArchLinux x86_64 / Win10 64 bit
G-virus
Гость
« Ответ #5 : Июня 17, 2010, 01:16 »

Попробуйте в проекте сделать
Код
C++ (Qt)
#undef UNICODE
 
Записан
zoro86
Гость
« Ответ #6 : Июня 17, 2010, 07:16 »

Да спасибо работает и так и так... в обоих вариантах... Dendy, G-virus, kuzulis спасибо... Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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