My C#应用程序(.NET Framework 4.0)使用以下代码导入外部非托管DLL:
[DllImport("myDLL.dll"), EntryPoint="GetLastErrorText"]
private static extern IntPtr GetLastErrorText();
不幸的是,第三方DLL中似乎存在错误。作为一种解决方法,我需要卸载DLL并在之后重新加载它。我怎样才能做到这一点?我已经看过几个帖子,但他们都谈论了托管DLL。
答案 0 :(得分:4)
您可以在库中编写一个包装器来管理对它的访问。然后,您可以使用本机方法来调用库。请查看this博文。
答案 1 :(得分:4)
我认为你需要使用LoadLibrary / FreeLibrary / GetProcAddress,如Difference between dllimport and getProcAddress所示:缩写样本(无错误处理)如下:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate Bool BarType(Byte arg);
...
IntPtr pDll= LoadLibrary("foo.dll");
IntPtr pfunc = GetProcAddress(pDll, "bar");
BarType bar = (BarType)Marshal.GetDelegateForFunctionPointer(pFunc, typeof(BarType));
var ok = bar(arg);
FreeLibrary(pDll);
答案 2 :(得分:2)
您可以尝试使用DllImport
(来自WinAPI)来执行此操作,而不是使用LoadModule
来导入DLL,然后使用GetProcAddress
和FreeLibrary
来执行操作你需要调用函数并卸载/重新加载它。
如果使用C ++ / CLR将C#和非托管DLL粘合在一起,可能会更漂亮/可管理。