刷新由 DllImport 充电的 dll

Refresh dll charged by DllImport

我正在为我的 C# 项目使用 API。我还有一个安装程序,用于在 4.7 版上设置可执行文件(名为 uEye)。

我的问题是:

我在 API 提供的 ddl 上使用了反编译器。获取版本的函数是:

public static int GetDLLVersion(out int s32Version)
{
    s32Version = IntPtr.Size != 8 ?        
        uEye.Info.System.ApiWrapper.GetDLLVersion_32() : 
        uEye.Info.System.ApiWrapper.GetDLLVersion_64();
    return 0;
}

[DllImport("ueye_api_64.dll", EntryPoint = "is_GetDLLVersion")]
private static extern int GetDLLVersion_64();

不知道DllImport是不是使用了一种缓存? 在这种情况下,我该如何刷新它?

谢谢

I wonder if DllImport does not use a kind of cache?

确实有缓存。非托管 DLL 在您的应用程序第一次调用该库中的函数时加载。此时 DLL 已加载到您的 .net 进程中,并且它将保持加载状态直到该进程终止。当您重新启动进程时,非托管 DLL 在调用第一个需要该 DLL 的函数时再次加载。

您遇到的问题是,当安装程序尝试更新 DLL 时,该 DLL 被加载到另一个进程中。在进程中加载​​ DLL 时,无法修改其文件。因此,您的安装程序无法立即修改磁盘上的文件,而是将更新推迟到下一次重新启动。如果您的安装程序写得很好,那么它应该会提示用户需要重新启动才能完成安装。

简而言之,这里的行为是符合预期的,真的没有什么可以做的了。当您的程序打开时,DLL 根本无法更新。