Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# P/Invoke是否执行DLL,然后将其关闭? 如果使用C++来调用/调用某个DLL,实际的C++ DLL会在调用期间运行,然后被关闭,破坏所有使用的内存吗?或者.W.NET负责C++在一个非托管堆中使用的DLL,并在每次调用静态函数时给C++对象提供指针,即< /P>_C#_C++_.net_Dll_Pinvoke - Fatal编程技术网

C# P/Invoke是否执行DLL,然后将其关闭? 如果使用C++来调用/调用某个DLL,实际的C++ DLL会在调用期间运行,然后被关闭,破坏所有使用的内存吗?或者.W.NET负责C++在一个非托管堆中使用的DLL,并在每次调用静态函数时给C++对象提供指针,即< /P>

C# P/Invoke是否执行DLL,然后将其关闭? 如果使用C++来调用/调用某个DLL,实际的C++ DLL会在调用期间运行,然后被关闭,破坏所有使用的内存吗?或者.W.NET负责C++在一个非托管堆中使用的DLL,并在每次调用静态函数时给C++对象提供指针,即< /P>,c#,c++,.net,dll,pinvoke,C#,C++,.net,Dll,Pinvoke,当我需要某个C++项目内存时,我应该创建一个ActiveX/COM服务器来保持它的内存,但它能调用它吗? 如果使用C++来调用/调用某个DLL,实际的C++ DLL会在调用期间运行,然后被关闭,破坏所有使用的内存? 否。加载DLL后,它将保持加载状态。DLL的生存期与函数调用无关。这意味着DLL中具有静态存储的变量将在初始p/invoke调用之后持续存在。如果您是从C++-DLL创建对象,它将实际持续存在,直到您删除它或更确切地说处置它。当您需要手动删除非托管对象时,它将保持。因此,是否可以将一

当我需要某个C++项目内存时,我应该创建一个ActiveX/COM服务器来保持它的内存,但它能调用它吗?

如果使用C++来调用/调用某个DLL,实际的C++ DLL会在调用期间运行,然后被关闭,破坏所有使用的内存?


否。加载DLL后,它将保持加载状态。DLL的生存期与函数调用无关。这意味着DLL中具有静态存储的变量将在初始p/invoke调用之后持续存在。

如果您是从C++-DLL创建对象,它将实际持续存在,直到您删除它或更确切地说处置它。当您需要手动删除非托管对象时,它将保持。

因此,是否可以将一个完全功能的C++项目作为DLL运行,并且具有简单的静态函数p//jk调用,从.NET中没有任何中断到C++侧?即使C++项目使用对象和DirectX和复杂的事物,它取决于你完全理解的功能吗?例如,考虑“代码> COM<代码>,在其中创建非托管组件,然后可以在托管环境中使用这些组件。所以这应该是可能的。内存存储在哪里?您能详细说明一下吗?非托管DLL加载到托管程序的应用程序域的地址空间中。请注意,您可以动态加载和卸载应用程序域,这将在卸载应用程序域时从内存中删除非托管DLL。存储的内存在哪里?关于这个问题,我的意思是:C++存储的内存在哪里?当由.NET应用程序运行时。。。“.NET将负责C++在一个非托管堆中使用的DLL,并在每次调用静态函数时将这些对象的指针提供给C++ DLL”,它由系统处理。您拥有的是一个本机的非托管DLL。它是通过调用
LoadLibrary
加载的。就像.net运行时本身一样。net不“负责”任何事情。它只使用标准的平台机制来加载DLL。