Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Error: cannot convert 'const WCHAR** to 'LPCWSTR ^
QtWS25 Last Chance

Error: cannot convert 'const WCHAR** to 'LPCWSTR ^

Scheduled Pinned Locked Moved General and Desktop
15 Posts 5 Posters 28.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    SherifOmran
    wrote on last edited by
    #1

    Hello Guys,

    I am trying to compile code taken from visual studio c++ with mingw but i keep on getting similar conversion problems

    @
    main.cpp:82: error: cannot convert 'const WCHAR** {aka const wchar_t**}' to 'LPCWSTR {aka const wchar_t*}' for argument '2' to 'int MessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT)'
    MessageBox (appWindow, message,"Note to Developer", MB_OK | MB_ICONASTERISK)^;
    @

    this is my code so far

    @

    #include <stdio.h>
    #include <windows.h>
    #include "resource.h"
    #define UNICODE

    #include "eWebLibrary.h"
    #include "Validate.h"

    #define STRINGLENGTH 64

    enum Status {
    Unknowon,
    NoSerialNumber,
    NotActivated,
    NotCurrent,
    Okay
    };

    HINSTANCE appInstance;
    HWND appWindow;
    HMENU appMenu;

    char* windowClass = "eSellerateDemo";

    char* publisherID = "PUB775527079";
    char* activationID = "ACT757079729:XTHEXA-3GBR-A8U4R3-U2AB-VE1HPH-Y8PD6P-A97J-WUFG99-882A-E85NRB";

    char webstoreID [STRINGLENGTH] = "STR9885216359";
    char versionTitle [STRINGLENGTH] = "";
    char serialNumber [STRINGLENGTH] = "";
    char enteredValue [STRINGLENGTH] = "";

    Status ownership = Unknowon;

    //////////////////////////////////////////////////

    static
    void NoteToDeveloper (
    char* message
    ) {
    MessageBox (appWindow, message,"Note to Developer", MB_OK | MB_ICONASTERISK);
    }

    @

    1 Reply Last reply
    0
    • S Offline
      S Offline
      SherifOmran
      wrote on last edited by
      #2

      Update: This was solved by adding the following to the pro file

      DEFINES -= UNICODE

      1 Reply Last reply
      1
      • S Offline
        S Offline
        SherifOmran
        wrote on last edited by
        #3

        now i get the following, any help is appreciated
        @
        main.cpp:-1: error: undefined reference to _imp__SelectObject@8' main.cpp:-1: error: undefined reference to _imp__CreateDIBitmap@24'
        main.cpp:-1: error: undefined reference to _imp__CreateCompatibleDC@4' main.cpp:-1: error: undefined reference to _imp__BitBlt@36'
        main.cpp:-1: error: undefined reference to `_imp__DeleteDC@4'

        @

        1 Reply Last reply
        0
        • A Offline
          A Offline
          andreyc
          wrote on last edited by
          #4

          Looks like you are using windows sdk.
          Have you added a windows library that implements the undefined functions?
          I think MSDN docs have more info about windows sdk.

          1 Reply Last reply
          0
          • R Offline
            R Offline
            Rondog
            wrote on last edited by
            #5

            You might need to define 'UNCODE' before including the windows header. Some things might not be set right if unicode is not defined before the windows header is processed.

            @
            #define UNICODE

            #include <stdio.h>
            #include <windows.h>
            #include "resource.h"
            @

            You might need to wrap text sent to the Win32 api with the _T() macro so that literals are treated properly by the compiler. This is defined in <tchar.h>. You can cast directly if you don't want to use this macro (i.e. L"Some text" ) which is basically what _T() does when unicode is defined.

            @
            #define UNICODE

            #include <stdio.h>
            #include <windows.h>
            #include <tchar.h>

            #include "resource.h"
            ...
            MessageBox (appWindow, message,_T("Note to Developer"), MB_OK | MB_ICONASTERISK);
            @

            1 Reply Last reply
            0
            • S Offline
              S Offline
              SherifOmran
              wrote on last edited by
              #6

              Code is
              ^
              @
              #include "mainwindow.h"
              #include <QApplication>

              #define UNICODE
              static libraries version
              requires:
              eWebLibrary.h
              eWebClient.lib
              eWebClient.dll
              validate.h
              validateLibrary.lib

              *************************************************/

              #include <stdio.h>
              #include <windows.h>
              #include <tchar.h>
              #include "resource.h"

              #include "eWebLibrary.h"
              #include "Validate.h"

              #define STRINGLENGTH 64

              enum Status {
              Unknowon,
              NoSerialNumber,
              NotActivated,
              NotCurrent,
              Okay
              };

              HINSTANCE appInstance;
              HWND appWindow;
              HMENU appMenu;

              char* windowClass = "eSellerateDemo";

              char* publisherID = "PUB775527079";
              char* activationID = "ACT757079729:XTHEXA-3GBR-A8U4R3-U2AB-VE1HPH-Y8PD6P-A97J-WUFG99-882A-E85NRB";

              char webstoreID [STRINGLENGTH] = "STR9885216359";
              char versionTitle [STRINGLENGTH] = "";
              char serialNumber [STRINGLENGTH] = "";
              char enteredValue [STRINGLENGTH] = "";

              Status ownership = Unknowon;

              static
              void NoteToDeveloper (
              char* message
              ) {
              MessageBox (appWindow, message,_T("Note to Developer"), MB_OK | MB_ICONASTERISK);
              }
              @

              it says now
              main.cpp:82: error: cannot convert 'char*' to 'LPCWSTR {aka const wchar_t*}' for argument '2' to 'int MessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT)'
              MessageBox (appWindow, message,_T("Note to Developer"), MB_OK | MB_ICONASTERISK);

              I have many similar errors .. yes i am trying to compile a code that was depending on MSVS with MinGW ..
              The project is using esellerate dll with QT
              if you like to have the code, i can send it per email

              1 Reply Last reply
              0
              • F Offline
                F Offline
                freeDNA
                wrote on last edited by
                #7

                try replacing all char with wchar_t and prefix every string with L:

                for example:

                char* publisherID = "PUB775527079";
                wchar_t* publisherID = L"PUB775527079";

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  SherifOmran
                  wrote on last edited by
                  #8

                  for this part of the code

                  @
                  wchar_t message [256];
                  wchar_t* format = L"%s returned:\r\n0xX (%s)";
                  switch ( result ) {
                  case E_SUCCESS:
                  case E_SDK_INSTALLED_ENGINE:
                  case E_SDK_LATEST_ENGINE_ALREADY_INSTALLED:
                  case E_VALIDATEACTIVATION_MACHINE_MATCH:
                  case E_ENGINE_SKU_UPDATE_AVAILABLE:
                  sprintf(message, format, call, result, L"success");
                  break;
                  @

                  I get

                  @
                  main.cpp:100: error: cannot convert 'wchar_t*' to 'char*' for argument '1' to 'int sprintf(char*, const char*, ...)'
                  sprintf(message, format, call, result, L"success");
                  ^
                  @

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    SherifOmran
                    wrote on last edited by
                    #9

                    When i disable the unicode i get the following with other undefined references

                    @
                    error: undefined reference to _imp__SelectObject@8' error: undefined reference to _imp__CreateDIBitmap@24'
                    @

                    1 Reply Last reply
                    0
                    • R Offline
                      R Offline
                      Rondog
                      wrote on last edited by
                      #10

                      Try defining _UNICODE in addition to UNICODE. Scanning the header files for mingw I found some #defines that use both and others that only use the underscore version. I remember something about this back when I did use MSVC.

                      @
                      #define UNICODE
                      #define _UNICODE
                      @

                      I checked in some of my old software and I did have the two define statements in there. There was some reason for doing this (or I was told to do this and never questioned it).

                      1 Reply Last reply
                      0
                      • R Offline
                        R Offline
                        Rondog
                        wrote on last edited by
                        #11

                        Yeah, that might do it

                        "#define UNICODE":http://stackoverflow.com/questions/7953025/why-both-unicode-and-unicode

                        1 Reply Last reply
                        0
                        • hskoglundH Online
                          hskoglundH Online
                          hskoglund
                          wrote on last edited by
                          #12

                          Hi, the code is kind of last century, what I mean, _T() L( and #define or undefine UNICODE, you can survive without them, since you are using Qt :-)

                          For example: try switching from MessageBox to Qt's QMessageBox:
                          @
                          #include "QMessageBox" // <-- include this
                          static
                          void NoteToDeveloper (
                          char* message
                          ) {
                          QMessageBox::information(QApplication::activeWindow(),"Note to Developer",message);
                          }
                          @

                          1 Reply Last reply
                          0
                          • S Offline
                            S Offline
                            SherifOmran
                            wrote on last edited by
                            #13

                            @rondog: Using _unicode did not make a change in the err output ..
                            @hskoglund: I can not convert to QMessageBox because it is not only a messagebox problem but i ve other function as well such as @RegCreateKeyEx@

                            For the following code, i get now

                            @
                            static
                            void NoteToDeveloper (
                            char* message
                            ) {
                            MessageBox (appWindow, message,"Note to Developer", MB_OK | MB_ICONASTERISK);
                            }

                            'MessageBoxW' : cannot convert parameter 2 from 'char *' to 'LPCWSTR'
                            Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
                            @

                            1 Reply Last reply
                            0
                            • S Offline
                              S Offline
                              SherifOmran
                              wrote on last edited by
                              #14

                              I uploaded the code in the following link, any body like to have a try compiling it, please share with me your result
                              I am using MinGW 4.8.3 (installed with QT5) and QT 4.8.2

                              "http://www.file-upload.net/download-10250968/esellerate.zip.html]esellerate.zip":[URL=http://www.file-upload.net/download-10250968/esellerate.zip.html]esellerate.zip[/URL]

                              1 Reply Last reply
                              0
                              • F Offline
                                F Offline
                                freeDNA
                                wrote on last edited by
                                #15

                                Replace ALL non-UNICODE-aware functions with UNICODE-awares ones:
                                for example:

                                use swprintf() instead of sprintf()
                                "Your text to link here...":https://msdn.microsoft.com/en-us/library/ybk95axf.aspx

                                Replace ALL char with wchar_t and prefix every string with L:

                                for example:

                                char* publisherID = “PUB775527079”;
                                wchar_t* publisherID = L“PUB775527079”;

                                1 Reply Last reply
                                0

                                • Login

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • Users
                                • Groups
                                • Search
                                • Get Qt Extensions
                                • Unsolved