P / Invoke是否执行DLL然后将其关闭?

时间:2013-03-24 12:47:41

标签: c# c++ .net dll pinvoke

如果我使用C#来调用某个DLL,那么实际的C ++ DLL是否会在调用期间运行然后被关闭,从而破坏所有已用内存?或者.NET会在非托管“堆”中负责C ++ DLL使用的内存,并在每次调用静态函数时指向C ++ DLL的那些对象吗?

当我需要某个C ++项目来保持其内存持久性时,我是否应该创建一个ActiveX / COM服务器来保持其内存,并且能够从C#调用它?

2 个答案:

答案 0 :(得分:5)

  

如果我使用C#来调用某个DLL,那么实际的C ++ DLL是否会在调用期间运行然后被关闭,从而破坏所有已用内存?

没有。加载DLL后,它将保持加载状态。 DLL的生命周期与函数调用绑定。这意味着DLL中具有静态存储的变量会持续超出初始p / invoke调用。

答案 1 :(得分:2)

如果要从C ++ - DLL创建对象,它实际上会持续存在,直到您删除它或者更改它为止。当您需要手动删除非托管对象时,它将保留。