C#导出dll函数
在 C++ 中我们能够通过 LoadLibrary, GetProcAddress 来动态调用 dll函数。
在C#导出也能够用这样的方式吗?
在 DotNet 2.0 里面这样是可以的, 这完全得益于 2.0新增的一个函数Marshal.GetDelegateForFunctionPointer 方法,此方法在 .NET Framework 2.0 版中是新增的。将非托管函数指针转换为委托。
实例代码如下:
publicdelegateintMsgBox(inthwnd,stringmsg,stringcpp,intok);
[DllImport("Kernel32")]
publicstaticexternintGetProcAddress(inthandle,Stringfuncname);
[DllImport("Kernel32")]
publicstaticexternintLoadLibrary(Stringfuncname);
[DllImport("Kernel32")]
publicstaticexternintFreeLibrary(inthandle);
privatestaticDelegateGetAddress(intdllModule,stringfunctionname,Typet)
{
intaddr=GetProcAddress(dllModule,functionname);
if(addr==0)
returnnull;
else
returnMarshal.GetDelegateForFunctionPointer(newIntPtr(addr),t);
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
inthuser32=0;
huser32=LoadLibrary("user32.dll");
MsgBoxmymsg=(MsgBox)GetAddress(huser32,"MessageBoxA",typeof(MsgBox));
mymsg(this.Handle.ToInt32(),txtmsg.Text,txttitle.Text,64);
FreeLibrary(huser32);
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
以上介绍C#导出dll函数。
【编辑推荐】