Forum: PC-Programmierung mpusbapi.dll und visuals studio c++


von Tobi (Gast)


Lesenswert?

Hallo,

ich bin gerade ein wenig am verzweifeln und ich hoffe Ihr könnt mir 
helfen. Ich mach mir nämlich ein USB-Device, dass ich dann per DLL 
steuern möchte. Dabei hab ich die Funktionen des USB-Device über C# 
überprüft.

Was benutzt wird:
mpusbapi.dll , mpusbapi.lib, _mpusbapi.h, Visual Studio 2008, eigenes 
entwickeltes USB Device, c++, c#


Was funktioniert:
Bei C# funktioniert die Kommunikation über die mpusbapi.dll mit dem 
USB-Device ohne Probleme.
Bei C++ zur Erstellung kann ich eigene DLLs schreiben und auch von einer 
Applikation aus aufrufen.

Was nicht funktioniert bzw. was es zu lösen gilt:
Ansprechen der mpusbapi.dll über C++

Was ich bei C++ unternommen habe:
Bis jetzt wollte ich nur die Funktion MPUSBGetDeviceCount zum laufen 
bringen. Dabei habe ich den Header von _mpusbapi.h includiert, unter den 
Projekt Eigenschaften -> Konfigurationseigenschaften -> Eingabe -> 
Zusätzliche Abhängigkeiten -> mpusbapi.lib hinzugefügt.

Fehlermeldung:
fatal error LNK1136 Ungültige oder beschädigte Datei. Und das kann ja 
eigentlich nicht sein, da ich die DLL auch unter C# benutzt habe und es 
keine Probleme gab. Vielleicht liegt es an irgendeiner Einstellung die 
ich noch nicht beachtet habe und komme nicht drauf.

Ich hoffe mir kann einer helfen und mir einen kleinen Schubs geben. 
Danke schon im Voraus

von Peter II (Gast)


Lesenswert?

Tobi schrieb:
> Und das kann ja
> eigentlich nicht sein, da ich die DLL auch unter C# benutzt habe und es
> keine Probleme gab.

dann ist ist eine c# dll und keine lib. Beides haben zwar die endung 
.dll aber es sind verschiende arten von Dateien.

öffne mal die dll mit "depends" und schau was dort für symbole 
exportiert sind.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Tobi schrieb:
> Fehlermeldung:
> fatal error LNK1136 Ungültige oder beschädigte Datei. Und das kann ja
> eigentlich nicht sein, da ich die DLL auch unter C# benutzt habe

Natürlich kann das sein. Das .Net-Geraffel benutzt keine 
Importlibraries, der C++-Compiler aber sehr wohl, wenn man sie ihm 
vorwirft.

Die *.lib-Datei ist das Problem, die wird mit einem nicht kompatiblen 
Compiler erzeugt worden sein.

Was Du jetzt machen kannst, ist die DLL dynamisch einzubinden, also per 
LoadLibrary zu laden und per GetProcAddress Funktionspointer auf die 
darin befindlichen für Dich interessanten Funktionen setzen.

von Tobi (Gast)


Lesenswert?

Danke für die schnelle Antwort.

Dependency Walker sagt, dass es C- Funktionen sind.

von Tobi (Gast)


Lesenswert?

Danke Rufus,

werde ich probieren und melde mich dann nochmal

von Tobi (Gast)


Lesenswert?

Danke Rufus,

das war der Weg zum Erfolg. Ich hab mir mal schnell die Pipes zum 
USB-Device geöffnet und mir die Handles über meine eigene DLL ausgeben 
lassen und siehe da es funktioniert.

Mit freundlichen Grüßen
Tobi

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Na, freut mich, geholfen haben zu können.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.