Unmanaged DLL und Klassenzugriff

  • C#
  • .NET 7–8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Unmanaged DLL und Klassenzugriff

    Hallo,

    wenn ich eine nicht verwaltete DLL einbinden will, dann finde ich Tutorials in ausreichender Menge. Referenziert werden aber immer nur Prozeduren, also so was wie

    C#-Quellcode

    1. [DllImport("nativedep")]
    2. static extern int ExportedFunction();


    Ich habe aber folgendes Konstrukt

    C#-Quellcode

    1. XComponentContext ctx = uno.util.Bootstrap.bootstrap();


    uno.util ist der Namespace, Boostrap ist eine versiegelte und statische Klasse. Und das alles liegt in einer unmanaged DLL.


    Wie binde ich denn die Methode boostrap ein?

    Ich habe es mal so probiert

    C#-Quellcode

    1. public static class UnoWrapper
    2. {
    3. [DllImport("ExterneDll/cli/cli_uretypes.dll")]
    4. internal static extern XComponentContext bootstrap();
    5. }
    6. ...
    7. var ctx2 = UnoWrapper.bootstrap();


    Geht natürlich nicht. Irgendwie fehlt da der Scope der Klasse Bootstrap und offensichtlich noch was andres.

    die aktuelle Fehlermeldung:
    Unhandled exception. System.Runtime.InteropServices.MarshalDirectiveException: Cannot marshal 'return value': Invalid managed/unmanaged type combination (Marshaling to and from COM interface pointers isn't supported).

    Wie macht man so was?
    @MasterQ Ich baue mir da auch eine Wrapper-Klasse:

    C#-Quellcode

    1. public static class UnoWrapper
    2. {
    3. [DllImport("ExterneDll/cli/cli_uretypes.dll")]
    4. private static extern XComponentContext bootstrap();
    5. public static XComponentContext BootStrap()
    6. {
    7. return bootstrap();
    8. }
    9. }
    10. internal class AnyClass
    11. {
    12. public void DoIt()
    13. {
    14. UnoWrapper.BootStrap();
    15. }
    16. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!