2009-08-19 9 views
1

Ich bin C# -Programmierer und führe Native nicht ein. Ich habe eine native DLL, & Ich kann das in meinem Projekt verwenden, aber einige der Typen sind in verwalteten Code nicht praktikabel. Ich werde eine DLL in Native (C++) vorzubereiten, und ich möchte, wenn ein Ereignis eintritt, dann bewusst, meine verwaltete Code; Wie kann ich das machen?Native DLL erstellen

Antwort

1

Wenn Ihre Mutter DLL API können Sie einen Funktionszeiger registrieren als ein Rückruf aufgerufen wird, wenn das Ereignis ausgelöst wird, können Sie einen normalen C# Delegaten als Funktionszeiger Marschall kann (Marshal.GetFunctionPointerForDelegate) und registrieren Sie den verwalteten Delegierten über P/Aufrufen.

1

Wenn Sie Native Ereignisse in Ihrem C# -Code behandeln möchten, dann ist Ihre beste Wette, eine C++/CLI DLL zu schreiben, die als Zwischenschicht zwischen C++ Native DLL und C# DLL funktionieren würde. Auf diese Weise können Sie Ereignisse in der Zwischenbibliothek behandeln und sie weiterleiten, damit sie von der verwalteten DLL erneut erfasst werden.

Eine weitere Möglichkeit besteht darin, Ihre native DLL als COM-DLL zu schreiben und von dort aus COM-Dispatch-Ereignisse auszulösen. Indem Sie ein Interop dieser COM-DLL erstellen, können Sie die Ereignisse direkt in Ihrer C# -DLL erfassen. Aber diese Route hat eine sehr steile Lernkurve, wenn Sie neu in der COM-Programmierung sind.