Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Installation and Deployment
  4. Using Winscard.lib in Qt
QtWS25 Last Chance

Using Winscard.lib in Qt

Scheduled Pinned Locked Moved Solved Installation and Deployment
winscardwinscard.libsmartcard
10 Posts 4 Posters 3.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.
  • T Offline
    T Offline
    Thomas_._
    wrote on 26 Jul 2018, 09:26 last edited by
    #1

    Hello all,
    I am creating a c++ application that uses the winscard library (I want to use smartcards and readers). I've created working code in Visual Studio 2017 but decided to switch over to Qt to create a decent UI. However, the code that runs 100% fine in VS, doesn't run in Qt and I've got no idea why. Please keep in mind that I'm new to Qt, this is what I've done.

    • I've installed QT and used the maintenance tool, this is how it looks.
      0_1532594615487_maintenanceTool.PNG

    • I've started a new project and copied my files into the new project.

    • I linked the library as an external library, and I linked it dynamically (I also tried static, didn't help).

    • These are my build settings:
      0_1532594854797_BuildSettings.PNG

    • This is a zip I created of the project. Its not the actual project, but its a simple/small one that demonstrates the problem.

    • Building and running the application works, so I suppose that the link to the library was successful?

    • I do need to note that I get a warning when right clicking the project and "Run qmake", but I'm guessing it only has to do with debugging. The waring is "warning: winrt_manifest_install.path is not defined: install target not created"

    So, the problem: when running the application all goes well, the application shows a button you can click. The code behind the button tries to run "SCardEstablishContext" from the winscard library and displays the return value on the button. The return value is 5, but it should be 0 to be successful.

    A return value of 5 is not a Smart Card Error Code, but a Windows System Error Code. The error code stands for ERROR_ACCESS_DENIED.

    I've been looking around what the problem could be but I honestly have no idea. Again, I'm new to Qt so i may have missed something obvious.

    To create the working Visual Studio 2017 project:

    • Create a new c++ Windows Console Application
    • Add the "Winscard.LIB" and "winscard.h" file to the directory.
    • Add "winscard.h" to the project (In solution explorer, right click the solution -> Add -> existing item -> winscard.h)
    • Go to properties (In solution explorer, right click the solution -> properties), then go to Linker -> Input -> Additional Dependencies and add "Winscard.lib".
    • This is how my main looks (stdafx was auto generated when creating the project):
    #include "stdafx.h"
    #include "winscard.h"
    #include <conio.h>
    #include <iostream>
    
    int main()
    {
    	SCARDCONTEXT _context;
    
    	LONG lRetValue = SCardEstablishContext(SCARD_SCOPE_USER, nullptr, nullptr, &_context);
    
    	std::cout << lRetValue;
    	_getch();
    	
        return 0;
    }
    

    When running this, it outputs 0 (which is what I want. The VS project works but the Qt one doesn't, does anyone know what I'm doing wrong?

    Thanks in advance,
    Thomas

    J 1 Reply Last reply 26 Jul 2018, 09:59
    0
    • A Offline
      A Offline
      aha_1980
      Lifetime Qt Champion
      wrote on 26 Jul 2018, 09:32 last edited by
      #2

      Hi @Thomas_._

      you selected Qt for UWP as your Kit. That builds an app for Windows RT, is that really what you want?

      You have the other Kits installed too, they will generate code for "classic" Windows API.

      Qt has to stay free or it will die.

      1 Reply Last reply
      3
      • T Offline
        T Offline
        Thomas_._
        wrote on 26 Jul 2018, 09:47 last edited by
        #3

        Hi @aha_1980 , thanks for your reply.

        It seems that I cannot use these kits, it says "Error: no Qt version set in kit" when I hover over them.
        The Qt versions for these kits did not get auto detected for some reason, I tried adding the Qt versions manually but It doesn't allow me to select a Qt version.
        0_1532598397187_QTVersions.PNG
        0_1532598407598_Kits.PNG

        A J 2 Replies Last reply 26 Jul 2018, 09:54
        0
        • T Thomas_._
          26 Jul 2018, 09:47

          Hi @aha_1980 , thanks for your reply.

          It seems that I cannot use these kits, it says "Error: no Qt version set in kit" when I hover over them.
          The Qt versions for these kits did not get auto detected for some reason, I tried adding the Qt versions manually but It doesn't allow me to select a Qt version.
          0_1532598397187_QTVersions.PNG
          0_1532598407598_Kits.PNG

          A Offline
          A Offline
          aha_1980
          Lifetime Qt Champion
          wrote on 26 Jul 2018, 09:54 last edited by aha_1980
          #4

          @Thomas_._

          I'd suggest to remove everything and install again from scratch:

          • You don't need the Preview Creator
          • You don't need MinGW if you want to use MSVC
          • You don't need the Android and UWP versions

          I'd just install the one Qt 5.11 for your Visual Studio C++ compiler (you need to expand the Qt 5.11.1 branch in the installer for that.

          That would reduce some confusion when searching for problems.

          Regads

          Qt has to stay free or it will die.

          1 Reply Last reply
          2
          • T Thomas_._
            26 Jul 2018, 09:26

            Hello all,
            I am creating a c++ application that uses the winscard library (I want to use smartcards and readers). I've created working code in Visual Studio 2017 but decided to switch over to Qt to create a decent UI. However, the code that runs 100% fine in VS, doesn't run in Qt and I've got no idea why. Please keep in mind that I'm new to Qt, this is what I've done.

            • I've installed QT and used the maintenance tool, this is how it looks.
              0_1532594615487_maintenanceTool.PNG

            • I've started a new project and copied my files into the new project.

            • I linked the library as an external library, and I linked it dynamically (I also tried static, didn't help).

            • These are my build settings:
              0_1532594854797_BuildSettings.PNG

            • This is a zip I created of the project. Its not the actual project, but its a simple/small one that demonstrates the problem.

            • Building and running the application works, so I suppose that the link to the library was successful?

            • I do need to note that I get a warning when right clicking the project and "Run qmake", but I'm guessing it only has to do with debugging. The waring is "warning: winrt_manifest_install.path is not defined: install target not created"

            So, the problem: when running the application all goes well, the application shows a button you can click. The code behind the button tries to run "SCardEstablishContext" from the winscard library and displays the return value on the button. The return value is 5, but it should be 0 to be successful.

            A return value of 5 is not a Smart Card Error Code, but a Windows System Error Code. The error code stands for ERROR_ACCESS_DENIED.

            I've been looking around what the problem could be but I honestly have no idea. Again, I'm new to Qt so i may have missed something obvious.

            To create the working Visual Studio 2017 project:

            • Create a new c++ Windows Console Application
            • Add the "Winscard.LIB" and "winscard.h" file to the directory.
            • Add "winscard.h" to the project (In solution explorer, right click the solution -> Add -> existing item -> winscard.h)
            • Go to properties (In solution explorer, right click the solution -> properties), then go to Linker -> Input -> Additional Dependencies and add "Winscard.lib".
            • This is how my main looks (stdafx was auto generated when creating the project):
            #include "stdafx.h"
            #include "winscard.h"
            #include <conio.h>
            #include <iostream>
            
            int main()
            {
            	SCARDCONTEXT _context;
            
            	LONG lRetValue = SCardEstablishContext(SCARD_SCOPE_USER, nullptr, nullptr, &_context);
            
            	std::cout << lRetValue;
            	_getch();
            	
                return 0;
            }
            

            When running this, it outputs 0 (which is what I want. The VS project works but the Qt one doesn't, does anyone know what I'm doing wrong?

            Thanks in advance,
            Thomas

            J Offline
            J Offline
            J.Hilk
            Moderators
            wrote on 26 Jul 2018, 09:59 last edited by
            #5

            @Thomas_._
            can you expand the qt 5.11.1 tree ? seems like you did not select the correct qt versions, that way we could verify that assumption


            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


            Q: What's that?
            A: It's blue light.
            Q: What does it do?
            A: It turns blue.

            1 Reply Last reply
            1
            • T Thomas_._
              26 Jul 2018, 09:47

              Hi @aha_1980 , thanks for your reply.

              It seems that I cannot use these kits, it says "Error: no Qt version set in kit" when I hover over them.
              The Qt versions for these kits did not get auto detected for some reason, I tried adding the Qt versions manually but It doesn't allow me to select a Qt version.
              0_1532598397187_QTVersions.PNG
              0_1532598407598_Kits.PNG

              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 26 Jul 2018, 10:43 last edited by
              #6

              @Thomas_._ Why did you select complete Qt 5.11.1?!
              You installed all Qt 5.11.1 builds (for MinGW, for all supported Visual Studio versions, for Android,...).
              Only install Qt versions you really need.

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              2
              • T Offline
                T Offline
                Thomas_._
                wrote on 26 Jul 2018, 13:37 last edited by
                #7

                @aha_1980, @J-Hilk and @jsulm, thanks for the quick responses.
                So I removed Qt and reinstalled it, this time I only installed the MSVC 2017 64bit. I also installed one of the tools as it was selected by default. The image shows I also installed MSVC 2015 32bit, but I only did this afterwards.
                0_1532611836135_mt1.PNG
                1_1532611836135_mt2.PNG
                However, I got the following when trying to build.
                0_1532611235734_Build2017.PNG
                There's the strange error on the bottom, but also the warning that Winscard.LIB is a x86 library and I'm targeting x64. It seems that there is no 32bit version for MSVS2017?
                Furthermore, Qt is giving an error in the winscard.h file, but I guess this may have something to do with the x86 and x64 mismatch? "Error: unterminated conditional directive" it says. but the #ifndef is definitely closed with an #endif at the end.

                So I decided that maybe I should try a 32-bit version, and thus I installed MSVC 2015 32-bit aswell. When trying to build this, I got the error " error: LNK1158: cannot run 'rc.exe' ". I do not have Visual studio 2015 installed tho, so this probably is the problem here.

                Do I install MSVC 2015 and try the MSVC2015 32-bit? Or should the 2017 work despite the x86 and x64 incompatibility?

                Thanks,
                Thomas

                A 1 Reply Last reply 26 Jul 2018, 14:12
                0
                • T Thomas_._
                  26 Jul 2018, 13:37

                  @aha_1980, @J-Hilk and @jsulm, thanks for the quick responses.
                  So I removed Qt and reinstalled it, this time I only installed the MSVC 2017 64bit. I also installed one of the tools as it was selected by default. The image shows I also installed MSVC 2015 32bit, but I only did this afterwards.
                  0_1532611836135_mt1.PNG
                  1_1532611836135_mt2.PNG
                  However, I got the following when trying to build.
                  0_1532611235734_Build2017.PNG
                  There's the strange error on the bottom, but also the warning that Winscard.LIB is a x86 library and I'm targeting x64. It seems that there is no 32bit version for MSVS2017?
                  Furthermore, Qt is giving an error in the winscard.h file, but I guess this may have something to do with the x86 and x64 mismatch? "Error: unterminated conditional directive" it says. but the #ifndef is definitely closed with an #endif at the end.

                  So I decided that maybe I should try a 32-bit version, and thus I installed MSVC 2015 32-bit aswell. When trying to build this, I got the error " error: LNK1158: cannot run 'rc.exe' ". I do not have Visual studio 2015 installed tho, so this probably is the problem here.

                  Do I install MSVC 2015 and try the MSVC2015 32-bit? Or should the 2017 work despite the x86 and x64 incompatibility?

                  Thanks,
                  Thomas

                  A Offline
                  A Offline
                  aha_1980
                  Lifetime Qt Champion
                  wrote on 26 Jul 2018, 14:12 last edited by
                  #8

                  Hi @Thomas_._

                  There's the strange error on the bottom, but also the warning that Winscard.LIB is a x86 library and I'm targeting x64. It seems that there is no 32bit version for MSVS2017?

                  No precompiled, at least, but see below.

                  Furthermore, Qt is giving an error in the winscard.h file, but I guess this may have something to do with the x86 and x64 mismatch? "Error: unterminated conditional directive" it says. but the #ifndef is definitely closed with an #endif at the end.

                  I think we can ignore that in first place.

                  So I decided that maybe I should try a 32-bit version, and thus I installed MSVC 2015 32-bit aswell.

                  That should work if you have a MSVC 2017 32 bit compiler (please check in Tools > Options > Kits > Compilers) as MSVC 2015 and 2017 are compatible.

                  When trying to build this, I got the error " error: LNK1158: cannot run 'rc.exe' ". I do not have Visual studio 2015 installed tho, so this probably is the problem here.

                  I remember that I have heard this problem before... but MSVC 2017 should also contain rc.exe...

                  Or should the 2017 work despite the x86 and x64 incompatibility?

                  No, you cannot mix 32 and 64 bit DLLs and apps. But can you get a 64 bit version of that DLL?

                  Regards

                  Qt has to stay free or it will die.

                  1 Reply Last reply
                  3
                  • T Offline
                    T Offline
                    Thomas_._
                    wrote on 26 Jul 2018, 15:24 last edited by
                    #9

                    @aha_1980, thanks, you solved my problem.
                    I'ts quite stupid that I did not think of this myself, but I do indeed have a 64 bit version of the DLL, using this fixed my problem for 64bit.

                    I also have a 32 bit compiler, using this compiler and the MSVC 2015 32-bit Qt version, I also managed to get the 32-bit Winscard lib working.

                    My problem is fixed, thank you!

                    Kind regards,
                    Thomas

                    A 1 Reply Last reply 26 Jul 2018, 17:07
                    1
                    • T Thomas_._
                      26 Jul 2018, 15:24

                      @aha_1980, thanks, you solved my problem.
                      I'ts quite stupid that I did not think of this myself, but I do indeed have a 64 bit version of the DLL, using this fixed my problem for 64bit.

                      I also have a 32 bit compiler, using this compiler and the MSVC 2015 32-bit Qt version, I also managed to get the 32-bit Winscard lib working.

                      My problem is fixed, thank you!

                      Kind regards,
                      Thomas

                      A Offline
                      A Offline
                      aha_1980
                      Lifetime Qt Champion
                      wrote on 26 Jul 2018, 17:07 last edited by
                      #10

                      @Thomas_._

                      Glad you got it working. Good luck with your project!

                      Qt has to stay free or it will die.

                      1 Reply Last reply
                      0

                      3/10

                      26 Jul 2018, 09:47

                      topic:navigator.unread, 7
                      • Login

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