Visual Stuio Code als DLL in Qt Creator verwenden

Alles rund um die Programmierung mit Qt
Antworten
Koabi
Beiträge: 5
Registriert: 30. September 2007 15:29

Visual Stuio Code als DLL in Qt Creator verwenden

Beitrag von Koabi »

Hi,
ich habe einen Algorithmus der in Visual Studio 2008 kompiliert den ich in meinem Programm das ich mit Qt Creator schreibe verwenden will.
Leider kann ich den Algorithmus nicht kompilieren da Qt anscheinend andere header für std::map und std::multimap verwendet und diese nicht kompatibel sind. Meine Idee war jetzt aus dem Code in VS eine DLL zu erstellen und diese dann in Qt zu verwenden. Ich müsste einzig ein 2d float Array hin und zurück übergeben.
Ist es generell möglich eine mit VS kompilierte DLL gut in Qt zu verwenden? Bei OpenCV habe ich die Erfahrung gemacht dass es erst richtig funktioniert hat als ich OpenCV auch mit MinGW kompiliert habe. Vorher sind viele funktionen gecrasht.
Wenn ja, giebt es irgendwo ein gutes Tutorial in dem ich nachlesen kann wie ich entsprechende Bilblotheken erzeugen kann? Ich habe es bereits mit einem MS Tutorial versucht das aber anscheinend VS spezifische dllexport Syntax verwendet.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

prinzipiell:

binaer genau "spezifiziert" iss nur C !
das heisst, baust du ne schnittstelle, die C funktionen und PODS hat, kannst diese dlls in anderen sprachen, also c / c++ / VB / python / perl / php ...
auch verwenden.

benutzt du "Klassen" in deinen schnittstellen, werden die dlls dazu inkompatibel, wei der aufbau einer klasse (wo liegen die funktionspointer, gibts da ueberhaupt funktionspointer oder wird ne methode inline kompiliert, wie iss die ausrichtung der parameter, wo liegen die memberdaten, wer raeumt den stack auf) nicht spezifiziert ist, und dem compiler ueberlassen wird.
Damit werden z.b. die dlls zu anderen sprachen soweiso (die kennen keine c++ klassen) und zu anderen kompilern, und sogar zum selben kompiler aber mit inkompatiblen flags, inkompatibel !

der QT creator verwendet bei dir den mingw oder ? also bist eh auf ne c Schnittstelle angewiesen.

Sowas geht recht einfach mit VS zu schreiben.
Win 32 projekt, dll auswaehlen, alle bibliotheken abhaken die ned brauchst (mfc, atl) ...
ne einsprung Source schreiben wo die funktionen in C Definiert werden (c++ zu C makros beachten, um name mergling auszuschalten)

wichtig, willst dich ned auf gesetzte Kompilerflags fuer die spezifikation der C-Funktions ausrichtungen verlassen, solltest du vor jeder funktion die speziell angeben ....

optional. hasst eigene typen (pods, also structuren / unions / enums) die in ner dem anwender zur dll mitgelieferten h datei definieren. Interne typen brauchst ned expliziet deklarieren.

in ner def datei alle (c)funktionen auffuehren, die in andere projecte exportiert werden sollen.

voiala ....

Intern kannst natuerlich munter c++ verwenden, darf nur ned nach aussen gegeben werden ...

Ciao ...
Koabi
Beiträge: 5
Registriert: 30. September 2007 15:29

Beitrag von Koabi »

Ich hab eigentlich nur ein interface:
float *skeletonize( float* image );

Wo kann ich denn Infos über so ein def file finden?
Koabi
Beiträge: 5
Registriert: 30. September 2007 15:29

Beitrag von Koabi »

Werds jetzt mal damit versuchen: http://www.codeproject.com/KB/DLL/dll.aspx
Koabi
Beiträge: 5
Registriert: 30. September 2007 15:29

Beitrag von Koabi »

Habs geschafft, danke nochmal.
Das def file schaut bei mir jetzt so aus:

Code: Alles auswählen

LIBRARY skdl.dll
EXPORTS
float* add(float*)
Antworten