如果我使用C#来调用某个DLL,那么实际的C ++ DLL是否会在调用期间运行然后被关闭,从而破坏所有已用内存?或者.NET会在非托管“堆”中负责C ++ DLL使用的内存,并在每次调用静态函数时指向C ++ DLL的那些对象吗?
当我需要某个C ++项目来保持其内存持久性时,我是否应该创建一个ActiveX / COM服务器来保持其内存,并且能够从C#调用它?
答案 0 :(得分:5)
如果我使用C#来调用某个DLL,那么实际的C ++ DLL是否会在调用期间运行然后被关闭,从而破坏所有已用内存?
没有。加载DLL后,它将保持加载状态。 DLL的生命周期不与函数调用绑定。这意味着DLL中具有静态存储的变量会持续超出初始p / invoke调用。
答案 1 :(得分:2)
如果要从C ++ - DLL创建对象,它实际上会持续存在,直到您删除它或者更改它为止。当您需要手动删除非托管对象时,它将保留。