刷新dllImport收取的dll

时间:2016-06-24 07:53:25

标签: c# .net dllimport

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

我的问题是:

  • 我的计算机上有uEye版本4.3
  • 我启动了我的应用程序,我遇到了错误"错误的版本"
  • 我开始设置
  • 安装程序检测到我没有4.7版本
  • 安装4.7版本
  • 我启动了我的应用程序,在重新启动之前我仍然遇到错误

我在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是否不使用某种缓存? 在这种情况下,我该如何刷新它?

谢谢

1 个答案:

答案 0 :(得分:0)

  

我想知道DllImport是否不使用某种缓存?

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

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

简而言之,这里的行为符合预期,而且其他任何事情都无法完成。在程序打开时,DLL无法更新。