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. [SOLVED] Windows 8.1 doesn't seem to find my dll (startup error 0xc0000135)
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] Windows 8.1 doesn't seem to find my dll (startup error 0xc0000135)

Scheduled Pinned Locked Moved General and Desktop
10 Posts 2 Posters 9.2k 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.
  • M Offline
    M Offline
    Mr.Floppy
    wrote on last edited by
    #1

    Hey,

    I am writing a Qt 5.3 Widgets application on my Windows 7 (x64) desktop PC, which works fine so far.
    Now I want to continue writing the same application on my Windows 8.1 (x64) notebook... outside in the sun and stuff... !

    So I got myself a SVN server and created a working copy of my project on my notebook (via the windows explorer... not the built-in Qt version control).

    I can compile the project just fine, but I can neither run, nor debug.
    The debugger throws: "During Startup program exited with error code 0xc000135".
    The compiler on both machines is MinGW 4.8.2 32bit.
    Both Qt-Creators are 3.1.2 based on Qt 5.3.1.

    This HAS to do with the hidapi.dll I am linking to.
    Can you please have a look at my project file and tell me why Windows 7 knows what to do and Windows 8.1 doesn't?

    @QT += core gui

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

    TARGET = myApp
    TEMPLATE = app

    SOURCES += main.cpp
    mainwindow.cpp
    qcustomplot.cpp \

    HEADERS += mainwindow.h
    ../../HIDAPI/hidapi.h
    qcustomplot.h \

    FORMS += mainwindow.ui

    #-------------------------------------------------

    Add the Signal11's hidapi library that was

    created

    #-------------------------------------------------
    win32: LIBS += -LD:\SVN\HIDAPI\windows -lHIDAPI

    #-------------------------------------------------

    Make sure to add the required libraries or

    frameoworks for the hidapi to work depending on

    what OS is being used

    #-------------------------------------------------
    win32: LIBS += -lSetupAPI

    #-------------------------------------------------

    Make sure output directory for object file and

    executable is in the correct subdirectory

    #-------------------------------------------------
    win32 {
    DESTDIR = windows
    OBJECTS_DIR = windows
    MOC_DIR = windows
    UI_DIR = windows
    RCC_DIR = windows
    }@

    To be honest, I haven't figured out exactly how to add an external library.
    The code above is mostly a courtesy of the internets.

    The folder structure on my desktop and my notebook are exactly the same and the needed dll is also present on both machines.
    The qt-project-file is found in "D:\SVN\myApp\myApp\myApp.pro"
    The HIDAPI dll is found in "D:\SVN\HIDAPI\windows\hidapi.dll"

    Cross platforming a minimalistic "Hello World" application from Windows 7 to 8.1 worked without any problems.

    Can you help?
    Thank you!

    schmaunz.

    1 Reply Last reply
    0
    • hskoglundH Offline
      hskoglundH Offline
      hskoglund
      wrote on last edited by
      #2

      Hi, just guessing but maybe. even though hidapi.dll is loading fine on your 8.1 system, it has some dependency. You could try Dependency Walker, load your .exe file and start Profile to see what dlls are loaded. and where it fails on 8.1.

      1 Reply Last reply
      0
      • M Offline
        M Offline
        Mr.Floppy
        wrote on last edited by
        #3

        Thanks hskoglund,

        dependency walker does indeed find the hidapi.dll but the following ones are missing:

        @MSVCR120D.DLL
        API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL
        API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
        API-MS-WIN-CORE-WINRT-L1-1-0.DLL
        API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
        API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
        API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL
        DCOMP.DLL
        IESHIMS.DLL@

        I do not have said files on my notebook, because I never installed Visual Studio on that one.
        The PC however has the Visual C++ Redistributable Packages installed, because Qt asked for the VS debugger after its first installation.

        Right now I have Qt installed on both machines with only MinGW checked, precisely because I want my creation to be able to run on non Microsoft machines at some time in the distant future.

        So what now?
        I assume there is a way to run Qt applications without the need of the Visual C++ Redistributable Packages, isn't there?

        What am I doing wrong?

        1 Reply Last reply
        0
        • hskoglundH Offline
          hskoglundH Offline
          hskoglund
          wrote on last edited by
          #4

          Hi, the missing DLLs are almost all false positives which you can disregard, except that MSVCR120D.DLL. It's the debug flavored DLL for MSVC 2013, not included in any Redistributable Packages. I.e. the normal MSVCR120.DLL is in there, but not the *D suffixed chap.

          Since you're using MinGW it has to be some other .DLL that has a dependency on MSVC 2013 debug mode. Maybe hidapi.dll is built using Visual Studio?

          1 Reply Last reply
          0
          • M Offline
            M Offline
            Mr.Floppy
            wrote on last edited by
            #5

            Yes, you are absolutely right.
            Dependency Walker says hidapi.dll depends on
            @SETUPAPI.DLL
            KERNEL32.DLL
            MSVCR120D.DLL@

            I would love to build my own hidapi.dll or to link it statically.
            Unfortunally I don't know how :(

            I think in the HIDAPI zip-file
            https://github.com/signal11/hidapi/downloads
            are all the components neccessary to build it using Qt.
            Do you know of a tutorial I can understand?

            1 Reply Last reply
            0
            • hskoglundH Offline
              hskoglundH Offline
              hskoglund
              wrote on last edited by
              #6

              Just looked at hidapi on GitHub, seems like a neat library, just one .c file, should be possible to build using Qt. Don't know any tutorial offhand, but some coffee and I could try it.

              Meanwhile, I downloaded the package, opened it in my MSVC 2013, changed the build mode from Debug to Release, compiled/zipped/uploaded to http://www.tripleboot.org/Qt/Release.zip

              In it is a hidapi.dll that depends on MSVCR120.DLL maybe it's useful for you :-)

              1 Reply Last reply
              0
              • M Offline
                M Offline
                Mr.Floppy
                wrote on last edited by
                #7

                I got a little carried away by your blog. Good stuff :)

                Sadly my notebook doesn't know about the MSVCR120.DLL either.

                As mentioned, I don't know anything about compiling dlls, so I don't know how much to thank you if you could manage to port(?) HIDAPI to Qt, but I think "a lot" sounds about right ;)

                If I'll learn something on the way, even better!

                But first I have to get some sleep.

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  Mr.Floppy
                  wrote on last edited by
                  #8

                  I found something on google:
                  https://code.google.com/r/tranthangtbc-ewh-bp-project/source/browse/trunk/PIC_code/BP+USB+code/PnP+Demo+-+Cross+Platform+Software/HIDAPI?name=branch-simple-app

                  It seems to be a part of this project: https://code.google.com/p/ewh-bp-project/, but I can't find any references leading towards it from there.

                  Anyway, it is a Qt project that is compiling a static hidapi library, which I am then able to link to myApp with the following project code:

                  @# HIDAPI needs this
                  win32: LIBS += -lSetupAPI

                  Auto generated code to link HIDAPI statically

                  win32:CONFIG(release, debug|release): LIBS += -L$$PWD/hidapi/windows/ -lHIDAPI
                  else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/hidapi/windows/ -lHIDAPId

                  INCLUDEPATH += $$PWD/hidapi/windows
                  DEPENDPATH += $$PWD/hidapi/windows

                  win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/hidapi/windows/libHIDAPI.a
                  else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/hidapi/windows/libHIDAPId.a
                  else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/hidapi/windows/HIDAPI.lib
                  else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/hidapi/windows/HIDAPId.lib@

                  It is using an old HIDAPI revision, but it is a start.
                  Their project-file to create the library doesn't look too complicated.

                  1 Reply Last reply
                  0
                  • hskoglundH Offline
                    hskoglundH Offline
                    hskoglund
                    wrote on last edited by
                    #9

                    Hi, just tested porting hidapi to Qt 5.31 MinGW 32-bit: created a simple widgets app, downloaded a fresh zip from https://github.com/signal11/hidapi , copied hid.c and hidapi.h into my Qt project and then tried the hid_enumerate() call in a loop, just displaying VIDs and PIDs in a listwidget.
                    Seems to work fine :-)

                    Pretty straightforward, only problem I got was that you need to locate a file from Microsoft called Setupapi.lib on your C: and then specify the path to it in the .pro file. In my case (using Windows XP) the path contained spaces, so had to use $$quote, e.g.
                    @
                    ...
                    LIBS += $$quote(C:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib/SetupAPI.lib)
                    ...
                    @

                    I've uploaded a zip with my project: http://www.tripleboot.org/Qt/Hidtest.zip

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      Mr.Floppy
                      wrote on last edited by
                      #10

                      Now that's almost too easy :)
                      Thank you!

                      Since there will be no further libraries involved, it compiles rather fast and the HIDAPI-license allows me to use the source any way I want, I think that's the path I'll follow.

                      [quote author="hskoglund" date="1406259726"][...] only problem I got was that you need to locate a file from Microsoft called Setupapi.lib [...][/quote]

                      I know, but in Windows 7 and 8 it works fine if you link the SetupAPI like this:
                      @win32: LIBS += -lSetupAPI@

                      Would you like to try if it works on WinXP, too?

                      And to keep the cross-platformness alive I think this would work, although at the moment I have no means to test this on non Windows machines
                      (note: I changed the folder structure a little bit to my liking)
                      @#-------------------------------------------------

                      Project created by QtCreator 2014-07-25T04:07:09

                      #-------------------------------------------------

                      QT += core gui

                      greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

                      TARGET = HidTest
                      TEMPLATE = app

                      SOURCES += main.cpp
                      mainwindow.cpp

                      HEADERS += mainwindow.h \

                      FORMS += mainwindow.ui

                      #-------------------------------------------------

                      Add cross-platform HIDAPI header

                      #-------------------------------------------------
                      HEADERS += hidapi/hidapi.h

                      #-------------------------------------------------

                      Add appropriate HIDAPI source file depending on OS

                      #-------------------------------------------------
                      macx: SOURCES += hidapi/mac/hid.c
                      unix: !macx: SOURCES += hidapi/linux/hid-libusb.c
                      win32: SOURCES += hidapi/windows/hid.c

                      #-------------------------------------------------

                      Add required libraries or frameworks for the

                      HIDAPI to work depending on what OS is being used

                      #-------------------------------------------------
                      macx: LIBS += -framework CoreFoundation -framework IOkit
                      win32: LIBS += -lSetupAPI
                      unix: !macx: LIBS += -lusb-1.0@

                      Thank you very much for your help and for your blog posts. I suppose they will be very helpful in the not so distant future :)

                      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