Latest blog posts for tag "C#"

C# (pronounced “C-sharp”) is a general-purpose, object-oriented programming language developed by Microsoft. C# is a statically-typed language, which means that the structure of a C# program is checked at compile time, rather than at runtime. C# is part of the .NET framework, which provides a rich set of libraries and tools for building and running C# applications.

LegacyWrapper 2.1 is out!

20.08.2017 | Programming | .NET C# Legacy Wrapper

Today, I released version 2.1 of my NuGet package LegacyWrapper. It comes with a major enhancement regarding the cross-architecture loading of DLLs: It is now possible to load 64bit DLLs from a 32bit process:

1using (var client = new WrapperClient(TestDllPath, TargetArchitecture.Amd64))
2{
3    result = (int)client.Invoke<TestStdCallDelegate>("TestStdCall", new object[] { input });
4}

As the second constructor parameter is optional and defaults to X86, the new release should be fully backwards compatible.

Read this post in about 1 minute

Invoking an unmanaged 32bit library out of a 64bit process

28.09.2015 | Programming | .NET C# Legacy Wrapper

When loading unmanaged / native libraries from managed .NET code, the normal way is to use the “Platform Invoke (P/Invoke)” mechanism.

1[DllImport("shell32.dll", CallingConvention = CallingConvention.Winapi)]
2static extern int DllGetVersion(ref DLLVERSIONINFO pdvi);

The problem

P/Invoke has an annoying limitation: You can not load an x86 (32bit) library into a 64bit process and vice versa. This is especially problematic when your application is compiled with the “AnyCPU”-flag - which lets the .NET runtime decide which architecture to use at runtime - and there is only one 32bit version of a specific DLL. If recompiling the library against a different architecture is not an option, you have to find another solution.

Read this post in about 3 minutes