LegacyWrapper icon indicating copy to clipboard operation
LegacyWrapper copied to clipboard

Dynamically define import dll

Open ElDuderinoBerlin opened this issue 6 years ago • 13 comments

Hello,

btw. nice project! Can i define the directory of the imported dll dynamically?

Regards Martin

ElDuderinoBerlin avatar Oct 11 '19 21:10 ElDuderinoBerlin

Hello Martin,

that's not possible at the moment. You have to specify the DLL path in the attribute on the interface you provide to the LegacyWrapper.

Kind Regards Franz

zalintyre avatar Oct 14 '19 18:10 zalintyre

Hallo Franz,

ich versuche das selber. Gibt es eine Möglichkeit in WrapperClientInterceptor::Intercept(IInvocation invocation) an die WrapperConfig ranzukommen? Das Dependency-Injection verwirrt mich. Ich werde auch Assemblies unterstützen, nicht nur Natives, da ich aus Assemblies (VC++.NET) ebenfalls über Prozessgrenzen hinweg Funktionen aufrufen muss. IntPtr-to-String Marshaling habe ich schon implementiert, da Speicher nicht gemarshalt werden kann über Prozessgrenzen.

Hatte sowas: IntPtr HoleEtwas() -> string HoleEtwas() Bsp.: [LegacyDllMethod(CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] [return: ReturnMarshalAs(DefaultReturnType = typeof(IntPtr), ReturnMarshalerType = typeof(IntPtrToStringMarshaler) )] string HoleEtwas();

Gruß Martin

ElDuderinoBerlin avatar Oct 15 '19 06:10 ElDuderinoBerlin

Habs selber geschafft! :-)

    public WrapperClientInterceptor(Type interfaceType, WrapperClient wrapperClient, ILibraryNameProvider libraryNameProvider, IWrapperConfig config)
    {
        Raise.ArgumentNullException.IfIsNull(interfaceType, nameof(interfaceType));
        Raise.ArgumentNullException.IfIsNull(wrapperClient, nameof(wrapperClient));
        Raise.ArgumentNullException.IfIsNull(libraryNameProvider, nameof(libraryNameProvider));

        _interfaceType = interfaceType;
        _wrapperClient = wrapperClient;
        _libraryNameProvider = libraryNameProvider;
        _config = config;
    }

        var configuration = WrapperConfigBuilder.Create()
            .TargetArchitecture(TargetArchitecture.X86)
            .ModuleSearchDirectory("M$:\Redmond\Bill")
            .Build();

ElDuderinoBerlin avatar Oct 15 '19 06:10 ElDuderinoBerlin

Stell mir gern einen Pull Request ;)

zalintyre avatar Oct 16 '19 20:10 zalintyre

@maddinthegreat bitte PR machen :) ich brauch die funktionalität auch!

sharpSteff avatar Jan 09 '20 14:01 sharpSteff

Seid beide nun Mittäter!

ElDuderinoBerlin avatar Jan 10 '20 12:01 ElDuderinoBerlin

@maddinthegreat erst wenn der PR da is :D

sharpSteff avatar Jan 10 '20 13:01 sharpSteff

@sharpSteff du müsstest den Code ziehen können - bist Kollaborator.

ElDuderinoBerlin avatar Jan 10 '20 13:01 ElDuderinoBerlin

@maddinthegreat gibt es Gründe wieso dein Repo kein offizieller Fork ist ?

sharpSteff avatar Jan 10 '20 17:01 sharpSteff

Wieso Fork? Hab den Code so runtergeladen und modifiziert, dann wieder hochgeladen. Entweder du nimmst das so oder lässt es bleiben!

ElDuderinoBerlin avatar Jan 10 '20 18:01 ElDuderinoBerlin

Naja du hast genau, das gleiche gemacht was ein Fork mit einem Klick gemacht hätte. Nur dass du die gesamte git History verloren hast und du über das repository keinen ssuberen Pull Request mehr auf das upstream Repo machen kannst

sharpSteff avatar Jan 10 '20 18:01 sharpSteff

Trotzdem danke :)

sharpSteff avatar Jan 10 '20 18:01 sharpSteff

Das ist eine private Ergänzung für ein spezielles Projekt gewesen. Da will ich keine Historie, noch mergen in Zukunft oder sonstwas! Das ich Dir Stunden an Coden gespart habe (ob Du das selber geschafft hättest, kann ich nicht sagen), kannste als nachträgliches Weihnachtsgeschenk betrachten. Bitte!

PS: Ich mach eben Bilder und benutze noch Papier. Bin eben oldschool. Und manchmal drucke ich mir Code aus, um ihn zu studieren.

ElDuderinoBerlin avatar Jan 11 '20 10:01 ElDuderinoBerlin