c#

位置:IT落伍者 >> c# >> 浏览文章

在C#中动态调用native dll的导出函数


发布日期:2021年11月29日
 
在C#中动态调用native dll的导出函数

在 C++ 中我们能够通过 LoadLibrary GetProcAddress 来动态调用 dll 的导出函数

在 C# 中也能够用这样的方式吗?

在 DotNet 里面这样是可以的 这完全得益于 新增的一个函数

MarshalGetDelegateForFunctionPointer 方法

此方法在 NET Framework 版中是新增的

将非托管函数指针转换为委托

实例代码如下

  public delegate int MsgBox(int hwndstring msgstring cppint ok);   [DllImport(Kernel)]   public static extern int GetProcAddress(int handle String funcname);   [DllImport(Kernel)]   public static extern int LoadLibrary(String funcname);   [DllImport(Kernel)]   public static extern int FreeLibrary(int handle);   private static Delegate GetAddress(int dllModule string functionname Type t)   {   int addr = GetProcAddress(dllModule functionname);   if (addr == )   return null;   else   return MarshalGetDelegateForFunctionPointer(new IntPtr(addr) t);   }   private void button_Click(object sender EventArgs e)   {   int huser = ;   huser = LoadLibrary(userdll);   MsgBox mymsg = (MsgBox)GetAddress(huser MessageBoxA typeof(MsgBox));   mymsg(thisHandleToInt() txtmsgText txttitleText );   FreeLibrary(huser);   }

               

上一篇:C# .Net中的类型转换

下一篇:visual studio2008 OpenGL开发配置方法