ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
1497
1497
EMPFEHLEN
-
Hallo,
ich habe eine C++ dll zur ansteuerung einer Industriekamera in mein Projekt eingebunden via DllImport.
Das hat auch sehr gut funktioniert. DIe Kamera kommuniziert über Ethernet.
Die Funktionen der Dll sind bekannt und auch dokumentiert. Mein Problem liegt darin das bei einer benötigten Funktion ich als Rückgabe einen Fehlercode bekomme der besagt das ein Parameter falsch sei.
Die Funktione sieht wie folgt aus:
Eingebunden habe ich dll im Projektexplorer mit Add Existing File da es als Recource nicht möglich ist. Anschließend folgender Code:
O3D2XX_API int __stdcall O3D2XXConnect ( HWND hCP, char * pIP, unsigned int iXMLPort, char * str_FWversion, char * str_SensorType )
Establish an Connection to the device.
Parameters:
hCP [IN] Window (handle) to send the messages to. If hcP != NULL the XML-RPC heartbeat is handled by the DLL If hcP == NULL the XML-RPC heartbeat mechanism is turned off by the device.
pIP [IN] IP address of the far end
iPort [IN] Port number of the far end
str_FWversion [OUT] device firmware version.
str_SensorType [OUT] device type.
Returns:
The Result. Success or the appropriate error state.
[DllImport("O3D2xxCamera.dll")]Aufruf mit:
public static extern int O3D2XXConnect(IntPtr hwnd, IntPtr ip, UInt16 iXMLPort, IntPtr str_FWversion, IntPtr str_SensorType);
IntPtr sensor = new IntPtr();Als Rückgabe erhalte ich -7200:
IntPtr firmware = new IntPtr();
IntPtr ip = Marshal.StringToBSTR("192.168.1.50");
O3D2XXConnect(this.Handle, ip, 8080, firmware, sensor));
#define O3D2XX_SENSOR_INVALID_PARAM -7200Funktioniert der aufruf so oder mache ich hier Grundsätzlich etwas falsch? Meine Vermutung ist das es am Handle liegt, aber ich lasse mich gerne belehren.
the current parameter is not valid.
MFG Markus
-
09.03.10 11:43 #2ahellwig Tutorials.de Gastzugang
Hallo!
Die Funktionsdeklaration des DllImport scheint mir fehlerhaft zu sein.
Für "char *" benutze die String- oder StringBuilder-Klasse, nicht IntPtr.
"unsigned int" bedeutet UInt32, nicht UInt16
siehe auch http://www.codeproject.com/KB/cs/essentialpinvoke.aspx
-
Hi,
danke für die Antwort!
Ich habe diese Problem auch an anderer Stelle diskutiert!
MyCsharp 1
und
MyCsharp 2
Trotzdem danke für deine Hilfe
MFG
-
Hallo Markus,
es sollte am besten so funktionieren: IN-Strings als "string", OUT-Strings als "StringBuilder" und HWND als "int":
GrußCode csharp:1 2 3 4 5 6 7 8 9
[DllImport("O3D2xxCamera.dll")] public static extern int O3D2XXConnect(int hwnd, string ip, UInt32 iXMLPort, StringBuilder str_FWversion, StringBuilder str_SensorType); ... StringBuilder sensor = new StringBuilder(80); StringBuilder firmware = new StringBuilder(80); O3D2XXConnect(this.Handle.ToInt32(), "192.168.1.50", 8080, firmware, sensor);
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
Ähnliche Themen
-
DLLImport <-> Unverwalteter Funktionszeiger
Von Cromon im Forum .NET CaféAntworten: 4Letzter Beitrag: 24.11.10, 09:56 -
DllImport
Von dila71 im Forum .NET CaféAntworten: 2Letzter Beitrag: 27.05.08, 12:48 -
DllImport einer Klasse?
Von aKraus im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 13.02.08, 09:15 -
merkwürdiger DllImport-Fehler
Von sTEk im Forum .NET CaféAntworten: 2Letzter Beitrag: 11.12.07, 11:29 -
DLL debuggen (DllImport)
Von MD1978 im Forum .NET CaféAntworten: 2Letzter Beitrag: 06.04.06, 09:18





Zitieren
Login





