Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如果我使用 C# 来 P/Invoke 某个 DLL,实际的 C++ DLL 会在调用期间运行然后被关闭,从而破坏所有使用的内存吗?还是 .NET 会负责 C++ DLL 在非托管“堆”中使用的内存,并在我每次调用静态函数时将指向这些对象的指针指向 C++ DLL?
当我需要某个 C++ 项目使其内存持久化时,我是否应该创建一个 ActiveX/COM 服务器以使其内存持久化,并且能够从 C# 调用它?
如果我使用 C# 来 P/Invoke 某个 DLL,实际的 C++ DLL 会在调用期间运行然后被关闭,从而破坏所有使用的内存吗?
不会。一旦加载了 DLL,它将保持加载状态。DLL 的生命周期与函数调用无关。这意味着 DLL 中具有静态存储的变量在初始 p/invoke 调用之后仍然存在。
如果您从 C++-DLL 创建一个对象,它实际上会一直存在,直到您删除它或更确切地说是处置它。由于您需要手动删除非托管对象,它将保留。