DllImport - Tool zum herrausfinden der richtigen Importdefinition?

Christian Kusmanow

Erfahrenes Mitglied
Hallo Tutorialer!

Ich versuche schon seit gestern eine Methode der Huffyuff.dll einzubinden und verzweifle langsam.
Ich hab es bisher so versucht, aber es Passiert einfach nichts wenn ich die Methode aufrufe:
C#:
[DllImport( "HUFFYUV.DLL" )]
public static extern bool DriverProc();
Auch wenn ich den Rückgabetyp als void deklariere. Alles andere verursacht einen Ausnahmefehler.
Huffyuv ist ein verlustloser Videocodec für das aufzeichnen von Videostreams.
Mehr Infos und die DLL findet ihr auf: http://neuron2.net/www.math.berkeley.edu/benrg/huffyuv.html

Kennt jemand evtl. ein Tool mit dessen Hilfe man mehr Informationen zu einer Methode bekommt
und wie man sie importieren muss? Ich find im Inet irgendwie nichts gescheites zu Thema.
Vielleicht such ich auch nur falsch. :rolleyes:
 
So, hab jetzt einen sog. P/Invoke Wizard gefunden,
nachdem ich in meiner Googlesuche das ".net" entfernt hab. :rolleyes:
http://www.google.com/search?hl=en&...num=0&ct=result&cd=1&q=dllimport+tool&spell=1

Der P/Invoke Wizard liest Headerfiles (*.h) ein und generiert daraus die gesamte Importdefinition.
Hab mir die Sourcen vom Huffyuv heruntergeladen, konnte aber mit dem Tool keinen Erfolg erziehlen,
da die Methode nicht in den Headerfiles der Huffyuv Sourcen aufgeführt ist.

Wenn jemand noch anderes Tool kennt oder mir Resourcen zum Themea empfehlen kann,
währe ich echt dankbar. :)
 
Ich hab mir den Quellcode mal angeschaut dort gibt es nur eine Methode mit Parametern:
Code:
LRESULT PASCAL DriverProc(DWORD dwDriverID, HDRVR hDriver, UINT uiMessage, LPARAM lParam1, LPARAM lParam2)
Einen leeren Block habe ich nicht gefunden.
 
Danke Dir mage. :)
Aber die Methode hab ich darin auch schon gefunden.
Nur bereitet es mir Probleme einen Vernünftigen DllImport daraus zu machen...

Dachte anfangs, daß es ein leerer Block ist,
weil das in meinem SpeedCommander (Dateibrowser) so da stand, als ich mal die Quickinfo zu der DLL aufgemacht hab.
 
Weil der anscheinend keine COM Schnittstelle mitbringt.
Probier doch einmal die Methode einfach mit ins Headerfile .h einzufügen und dann das Tool drüber laufen zu lassen.
 
Ich bekom das:
C#:
public static extern bool DriverProc( uint dwDriverID, HDRVR hDriver, int uiMessage, int lParam1, int lParam2 );
Jetzt stellt sich nur die Frage was HDRVR ist. :confused:
 
Also laut Beschreibung ein Handle auf den Treiber..
Ein Handle im Windows ist ja immer ein Integer möglicherweise in IntPtr.

Das ist die Beschreibung aus dem Quellcode:
Code:
/***************************************************************************
 * DriverProc  -  The entry point for an installable driver.
 *
 * PARAMETERS
 * dwDriverId:  For most messages, <dwDriverId> is the DWORD
 *     value that the driver returns in response to a <DRV_OPEN> message.
 *     Each time that the driver is opened, through the <DrvOpen> API,
 *     the driver receives a <DRV_OPEN> message and can return an
 *     arbitrary, non-zero value. The installable driver interface
 *     saves this value and returns a unique driver handle to the
 *     application. Whenever the application sends a message to the
 *     driver using the driver handle, the interface routes the message
 *     to this entry point and passes the corresponding <dwDriverId>.
 *     This mechanism allows the driver to use the same or different
 *     identifiers for multiple opens but ensures that driver handles
 *     are unique at the application interface layer.
 *
 *     The following messages are not related to a particular open
 *     instance of the driver. For these messages, the dwDriverId
 *     will always be zero.
 *
 *         DRV_LOAD, DRV_FREE, DRV_ENABLE, DRV_DISABLE, DRV_OPEN
 *
 * hDriver: This is the handle returned to the application by the
 *    driver interface.
 *
 * uiMessage: The requested action to be performed. Message
 *     values below <DRV_RESERVED> are used for globally defined messages.
 *     Message values from <DRV_RESERVED> to <DRV_USER> are used for
 *     defined driver protocols. Messages above <DRV_USER> are used
 *     for driver specific messages.
 *
 * lParam1: Data for this message.  Defined separately for
 *     each message
 *
 * lParam2: Data for this message.  Defined separately for
 *     each message
 *
 * RETURNS
 *   Defined separately for each message.
 *
 ***************************************************************************/
 
Ich denke ich komm nur weiter, wenn ich mir mal die Sourcen vom VirtualDub anzuschaue.
Ich weiss aber jetzt schon, daß ich die sicher schwer durchblicken werde.
Danke trotzem für deine Hilfe mage. :)
 
Zurück