Home > C-Sharp, Dotnet, Windows > Memanggil DLL secara dinamis di C#

Memanggil DLL secara dinamis di C#

Tulisan ini menjelaskan bagaimana cara memanggil function yang terdapat pada sembarang file MFC DLL dari C# code.  Disini kita menggunakan Reflection namespace, dan untuk dapat memanfaatkannya diperlukan:

using System.Reflection.Emit;
using System.Reflection;

Misalnya kita memiliki file MFC DLL (getmyversion.dll) dengan suatu function int GetDllversion(char* verstr) yang mengeluarkan hasil berupa versi DLL yang terletak pada verstr.

Function dibawah ini membuat dynamic assembly object, dan DefinePInvokeMethod method membuat method yang akan kita gunakan untuk meng-access function DLL. Untuk melengkapi operasi pemanggilan dynamic module, panggil CreateGlobalFunctions. Menggunakan function GetMethod dari created method yang baru dibuat, kita dapat memanggil function yang ada di MFC DLL.

public  object DynamicDllFunctionInvoke( string DllPath, string EntryPoint )
{
   // Version string definition

   byte[] verstr = new byte[1024];
   //Define return type of your dll function.

   Type returnType = typeof(int);
   //out or in parameters of your function.

   Type [] parameterTypes = {typeof(byte[])};
   object[] parameterValues = {verstr};
   string entryPoint = entrypoint;

   // Create a dynamic assembly and a dynamic module

   AssemblyName asmName = new AssemblyName();
   asmName.Name = "tempDll";
   AssemblyBuilder dynamicAsm = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName,
     AssemblyBuilderAccess.Run);
   ModuleBuilder dynamicMod = dynamicAsm.DefineDynamicModule("tempModule");

   // Dynamically construct a global PInvoke signature

   // using the input information

   MethodBuilder dynamicMethod = dynamicMod.DefinePInvokeMethod(
     entryPoint, DllPath, MethodAttributes.Static | MethodAttributes.Public
     | MethodAttributes.PinvokeImpl , CallingConventions.Standard,
     returnType, parameterTypes, CallingConvention.Winapi,
     CharSet.Ansi);

   // This global method is now complete

   dynamicMod.CreateGlobalFunctions();

   // Get a MethodInfo for the PInvoke method

   MethodInfo mi = dynamicMod.GetMethod(EntryPoint);
   // Invoke the static method and return whatever it returns

   object retval = mi.Invoke(null, parameterValues);
   // Filled verstr paramter.

   MessageBox.Show(System.Text.ASCIIEncoding.ASCII.GetString(verstr));
   return retval;
}

Contoh pemanggilan function di atas:

DynamicDllFunctionInvoke(@"c:\getmyversion.dll","GetDllVersion");

Akhmad Daniel Sembiring

vITraining.com – Qualified IT Products, Outsourcing, and Services

Ligarwangi.com – Linux, E-book, Coffee, Gift, etc

  • Share/Bookmark
Categories: C-Sharp, Dotnet, Windows Tags: , ,
  1. No comments yet.
  1. No trackbacks yet.
This site uses a Hackadelic PlugIn, Hackadelic SEO Table Of Contents 1.6.0.