Frage

Ich habe eine exportierte Funktion in einem C ++ DLL

// C++ DLL (Blarggg.dll)

extern "C"
{
     USHORT ReadProperty( BYTE * messsage, USHORT length, BYTE * invokeID ) 
    {
         if( invokeID != NULL ) {
            * invokeID = 10 ; 
        }
         return 0;
    }
}

Das möchte ich es zu meiner C # Anwendung zur Verfügung stellen

// C# app 
[DllImport("Blarggg.dll")]
public static extern System.UInt16 ReadProperty(
        /* [OUT] */ System.Byte[] message,
        /* [IN]  */ System.UInt16 length,
        /* [OUT] */ System.Byte[] invokeID ); 


private void DoIt() 
{
    System.Byte[] message = new System.Byte[2000];
    System.Byte[] InvokeID = new System.Byte[1];
    System.UInt16 ret = ReadProperty( message, 2000, InvokeID ); // Error 
}

Das Problem ist, dass ich die folgende Fehlermeldung erhalte.

  

Eine unhanded Ausnahme des Typs 'System.NullReferenceException' aufgetreten in Blarggg.dll   Weitere Informationen: Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

Ich verwende VS2008 sowohl die DLL und die C # Anwendung zu erstellen.

Ich bin kein C # Programmierer.

Was mache ich falsch?

War es hilfreich?

Lösung

ich Ihren Code direkt in VS2008 eingefügt und es läuft perfekt auf meinen 32-Bit-Rechnern (hinzugefügt, um eine DEF-Datei den exportierten Namen gesetzt). Ist Ihre C ++ Bibliothek auf jeden Fall ein reines win32-Projekt? Die Fehlermeldung Sie gab scheint zu implizieren, dass es eine CLR-Ausnahme ausgelöst hat.

Andere Tipps

Versuchen Sie folgendes:

[DllImport("Blarggg.dll", CallingConvention := CallingConvention.Cdecl)] 
public static extern System.UInt16 ReadProperty( 
        /* [IN]  */ System.Byte[] message, 
        /* [IN]  */ System.UInt16 length, 
        /* [OUT] */ out System.Byte invokeID );  


private void DoIt()  
{ 
    System.Byte[] message = new System.Byte[2000]; 
    System.Byte InvokeID; 
    System.UInt16 ret = ReadProperty( message, 2000, out InvokeID );
} 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top