Ako na knižnicu, aneb Qt a .dll/.obj

Programovacie jazyky, rady, poradňa...
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa BX »

Zdravím. Potýkam sa s takým väčším problémom a síce:
Potrebujem v Qt vytvoriť aplikáciu, ktorá využíva GPIB (ak nevieš, čo je to GPIB, nevadí, čítaj ďalej). Mám k tomu gpib-32.dll a gpib-32.obj + jeden header.
V CodeBlocks som to dokázal spojazniť jednoducho a síce prilinkovaním .obj fajlu, takže mi to všetko pekne funguje ako má.
Rozbehať to v Qt Creatore (v. 2.4.1) sa ale zdá byť nemožné. Robím to podľa všetkých možných návodov na internete, no stále mi píše buď "Neviem otvoriť ...", alebo "invalid or corrupt file: cannot read at 0x..."
A to ako pri .obj, tak pri .dll.

Pýtam sa teda, má s týmto niekto nejaké skúsenosti? Nejaký nápad?
Prípadne, ak mi to v CodeBlocks funguje, viem s tým niečo vyčarovať a zariadiť, aby to šlo aj v Qt?
(Príp. môžem Qt zmeniť za .NET, alebo aj iné okienka pre windows. Potrebné knižnice sú ale robené v C (nie je to len táto), takže ak má niekto nejaký nápad, sem s ním)
Viper
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 137
Registrovaný: 14 mar 2012, 13:19

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa Viper »

Jednoducho chceš ten header vložiť do svojho projektu správne? Ak hej tak musíš do .pro vložiť INCLUDEPATH a ešte do tvojho projektu tam kde bude menoprojektu+release/debug tam musíš vložiť to .dll
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa harrison314 »

Je to sice strela naslepo ale pri Lua libkach mi to pomohlo,
obal include tej kniznice do extern "C"

Kód: Vybrať všetko

extern "C" {
 #include "gpib.h"
}
Ak nepomoze, osobne by som siel do C# , kde cez DllImport a namescpace system.runtime.interopservices mozes vyuzivat vsetko co je v natvynch DLL-kach,
len treba pozorne citat hlavickovy subor tej libky aby si dal spravne typy,
ak ty daco nebude jasne alebo nepojde poradim, mam vela skusenosti s prepajanim natyvneho a manazovaneho kodu.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa BX »

Viper: Vyzerá mi to tam takto:

Kód: Vybrať všetko

QT       += core gui

TARGET = IEAP3
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h \
    PowerSupplier.hpp \
    gpib-32.hpp

FORMS    += mainwindow.ui

INCLUDEPATH += "C:\Users\BX\Documents\Qt projects\IEAP3\"
LIBS += "C:\Users\BX\Documents\Qt projects\IEAP3\gpib-32.dll"

build píše

Kód: Vybrať všetko

error: LNK1107: invalid or corrupt file: cannot read at 0x2B8 (gpib-32.dll)
DLLku mám nakopírovanú úplne všade.

Harrison: V extern C to je. Pre Qt sme sa rozhodli preto, že kolega (čo robí okienka) mal práve problém s tým managed/unmanaged kódom a tiež preto, že v budúcnosti MOŽNO bude potrený port na linux. Preto by sme radšej šli v Qt.
Ak to ale niagraz nepôjde a rozhodneme sa pre C#, napíšem ti určite správu, ak smiem :)
(Príp. máme ešte plán B, ktorý bude fungovať určite, ale radšej by som vyriešil toto)
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa metthal »

Pokial viem v C++ sa v ramci linkovania nikdy nelinkuje priamo DLL, ale OBJ/LIB. Nekusal si tam teda pri LIBS napisat namiesto *.dll to *.obj?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa BX »

Samozrejme, že skúšal. (Skoro) to isté:

Kód: Vybrať všetko

error: LNK1107: invalid or corrupt file: cannot read at 0x6966
A ak dám do LIBS

Kód: Vybrať všetko

-l"C:\Users\BX\Documents\Qt projects\IEAP3\gpib-32.obj"
alebo len -lgpib-32
píše

Kód: Vybrať všetko

error: LNK1104: cannot open file 'C:\Users\BX\Documents\Qt projects\IEAP3\gpib-32.obj.lib'
Lenže ja .lib nemám! Prečo mi toto robí :cry: (A ak obj premenujem na lib, píše zase rovnaký corrupt)
(Nejaký chytrý prepínač nepoznáte? Na msdn som nič použiteľné nenašiel - je tam MS Visual C++ compiler)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa harrison314 »

metthal napísal:Pokial viem v C++ sa v ramci linkovania nikdy nelinkuje priamo DLL, ale OBJ/LIB. Nekusal si tam teda pri LIBS napisat namiesto *.dll to *.obj?
Pri statickom linkovani sa da linkovat aj priamo DLL, vtedy sa stava sucastou execka, takze je to mozne.

BX: jasne ze mozes
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa BX »

BX napísal:(A ak obj premenujem na lib, píše zase rovnaký corrupt)
Neúspešne...
metthal
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2475
Registrovaný: 26 jan 2006, 18:32
Bydlisko: Nitra / Brno

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa metthal »

Tak toto o statickom linkovani DLL som nevedel, pretoze 99% casu linkujem dynamicky. To ci ti premenovanie obj na lib pojde neviem zarucit, ja ani nemam sajnu ako funguje ten Qt Creator. Ked som robil s Qt tak som si ho radsej rozbehal pod Visual Studiom.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa BX »

metthal napísal:Ked som robil s Qt tak som si ho radsej rozbehal pod Visual Studiom.
Toto je dobrý nápad! :D Veruže ma to nenapadlo. Idem vyskúšať nalinkovať to vo VS a ak to pôjde, skúsim rozchodiť aj Qt.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa harrison314 »

BX napísal: Neúspešne...
Ja som si nevsimol tvoju poslednu vetu, mne to pri jednej libke pomohlo, este ma napdlo nevyzaduje ta kniznica nejakey specialny prepinac? Napriklad niektore kniznice potrebuju osobitne prepinac pre linker aj kompilator ( napr OpenMP potrebuje -fopenmp pre linker a -fopenmp pre prekladac ),
este skus puzit dependency walker na gpib-32.dll, ci nie je nevyhodi nejaku zavislost ktoru nemas v projekte.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa BX »

Visual Studio hádzalo rovnaké chyby, tak som sa ešte raz pozrel do útrob National Instruments a našiel .obj knižnicu, ktorá mala síce rovnaké meno, ale inú veľkosť. Linkol som ju presne tak, ako som to robil a všetko beží ako má.

A aké z toho plynie ponaučenie? Keď vám nejde nalinkovať knižnica a linkujete ju správne, chyba nebude v postupe :D
Debilný som. Ďakujem všetkým za účasť.

Ale trable s Qt sa nekončia... už to vidím.
Viper
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 137
Registrovaný: 14 mar 2012, 13:19

Re: Ako na knižnicu, aneb Qt a .dll/.obj

Príspevok od používateľa Viper »

Potom napíš robím v Qt denne možno ti poradím :)
Napísať odpoveď