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 ^
Forum Updated to NodeBB v4.3 + New Features

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

Scheduled Pinned Locked Moved General and Desktop
15 Posts 5 Posters 28.9k Views 1 Watching
  • 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 3 Feb 2015, 04:14 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 3 Feb 2015, 05:49 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 3 Feb 2015, 14:36 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 3 Feb 2015, 19:16 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 3 Feb 2015, 19:20 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 3 Feb 2015, 19:26 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 3 Feb 2015, 19:29 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 3 Feb 2015, 21:05 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 3 Feb 2015, 21:08 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
                    • H Online
                      H Online
                      hskoglund
                      wrote on 3 Feb 2015, 23:51 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 4 Feb 2015, 06:15 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 4 Feb 2015, 06:19 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 4 Feb 2015, 20:15 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

                            12/15

                            3 Feb 2015, 23:51

                            • Login

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