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
Ligarwangi.com - toserba online
Tidak ada komentar:
Posting Komentar