tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1497
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Rawukal Rawukal ist offline Grünschnabel
    Registriert seit
    Mar 2010
    Beiträge
    2
    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:

    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.
    Eingebunden habe ich dll im Projektexplorer mit Add Existing File da es als Recource nicht möglich ist. Anschließend folgender Code:
    [DllImport("O3D2xxCamera.dll")]
    public static extern int O3D2XXConnect(IntPtr hwnd, IntPtr ip, UInt16 iXMLPort, IntPtr str_FWversion, IntPtr str_SensorType);
    Aufruf mit:
    IntPtr sensor = new IntPtr();
    IntPtr firmware = new IntPtr();
    IntPtr ip = Marshal.StringToBSTR("192.168.1.50");
    O3D2XXConnect(this.Handle, ip, 8080, firmware, sensor));
    Als Rückgabe erhalte ich -7200:
    #define O3D2XX_SENSOR_INVALID_PARAM -7200
    the current parameter is not valid.
    Funktioniert 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.

    MFG Markus
     

  2. #2
    ahellwig 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
     

  3. #3
    Rawukal Rawukal ist offline Grünschnabel
    Registriert seit
    Mar 2010
    Beiträge
    2
    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
     

  4. #4
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo Markus,

    es sollte am besten so funktionieren: IN-Strings als "string", OUT-Strings als "StringBuilder" und HWND als "int":
    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);
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

Ähnliche Themen

  1. DLLImport <-> Unverwalteter Funktionszeiger
    Von Cromon im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 24.11.10, 09:56
  2. DllImport
    Von dila71 im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 27.05.08, 12:48
  3. DllImport einer Klasse?
    Von aKraus im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 13.02.08, 09:15
  4. merkwürdiger DllImport-Fehler
    Von sTEk im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 11.12.07, 11:29
  5. DLL debuggen (DllImport)
    Von MD1978 im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 06.04.06, 09:18