我有一个现有的C ++ DLL,它是通过LoadLibray从调用应用程序中调用的。 它被交给一个窗口,并有望在该窗口中运行。 在单个窗口环境中(即为下一个用户和/或窗口卸载DLL),一切都很好。 但是,我发现当我们交给多个窗口时,会发生麻烦。

我认为这些问题是由于我们草率的并且拥有大量的全局数据(例如, extern或在类外部的declare s)而引起的,当然,当切换窗口时,并非所有数据都会被更新正确地将其“混合”。

一种解决方案可能是包装所有全局数据并将其“分配给窗口”,然后在激活特定窗口时,指针将指向该数据块。 但是,我认为这是一项巨大的编码工作。

我想知道的另一个解决方案(最后是问题:-)是我们是否可以包装DLL并将其制成一个.NET对象,该对象将针对每个所需的Windows实例化。

问题是,这样做是否可以使每个实例彼此完全独立,从而消除我们在使用全局变量时遇到的麻烦?

  ask by EdtheC translate from so

本文未有回复,本站智能推荐:

1回复

CUDA - 保持指向全局内存的指针

我有一个使用CUDA的.NET程序。 通过C DLL访问CUDA。 我正在做的是通过在程序启动时在设备上分配缓冲区(cudaMalloc)来初始化我的CUDA应用程序。 然后将指向这些缓冲区的指针保存在DLL中声明的静态变量中。 在整个程序中,数据被复制到缓冲区或从缓冲区复制。
1回复

如何从内存中释放在VB6应用程序中调用的.Net DLL?

我有一个旧的VB6项目,我在其中创建了.Net库。 我仍然处于此dll的单元测试阶段,所以问题是每次我更新dll并让运行中的VB6应用程序识别它时,我被迫关闭该应用程序,以将新的dll版本替换为新的一。 因此,我认为该dll在首次调用时正在加载到内存中,直到我退出调用它的应用程序时才被释放。
4回复

内存中的大型数据集 - .NET Framework和C#

我有一个DLL项目,它使我的应用程序中使用的所有显示字符串的单例。 问题是我需要在许多独立运行的应用程序中引用此DLL。 据我所知,如果我在所有独立运行的应用程序中引用DLL项目,它们都会将DLL加载到内存中并创建它们可以引用的单个单例,但这是我想要避免的冗余。 有没有办法可以将这
5回复

在进程之间共享dll-虚拟内存似乎无济于事

我的意图是在应用程序之间共享dll,例如,如果我有2个应用程序加载了20MB dll,而不是一个进程使用200MB内存,另一个进程也使用200MB,则其中一个将从共享中受益,仅使用180MB记忆。 我的问题是内存的定义,请继续阅读。 我创建了2个.net c#应用程序,这些应用程序引用并
1回复

dll映像在虚拟内存中如何比硬盘驱动器空间大1000倍以上?

我正在使用32位Windows应用程序,该应用程序有时可能会耗尽内存(2GB的虚拟地址空间)。 当我查看如何使用WinDbg或VMMap分配虚拟内存时,我注意到一个dll映像占用了85 MB的虚拟内存空间。 具体来说,其中的84 MB位于“ .data”部分中,并具有“写时复制”保护。 但
2回复

如何在.NET中将内存分配给全局变量?

程序中的内存分配:代码和数据。 堆。 堆。 如果我有一个静态/全局变量(让我们说一个原始类型),则理论建议在加载已编译的程序时分配内存(在此示例中忽略动态链接和加载,并假设程序包含一个模块)。 但是如果全局变量是引用类型怎么办? 运行时是否会调整代码/数据区域的内存分配? 还
1回复

跨DLL分配/取消分配的内存管理器

解决:经过几次实验,似乎是有可能的。 我想知道是否有可能通过让内存管理器附带重载的内存函数(new,delete,delete [],malloc()...)来负责任何分配/解除分配,从而避免常见的跨dll分配/解除分配问题。可以在程序中的任何地方发生,从而确保一致性。 假设a.dl
3回复

从C#中的常规dll调用函数-内存分配问题?

嗨,小伙子们 具有带有导出功能的常规C dll int GetGroovyName(int grooovyId,char * pGroovyName,int bufSize,) 基本上,您传递给它一个ID(int),一个带有内存预分配的char *缓冲区以及传入的缓冲区大小。
2回复

DLL内存管理

我对Windows如何管理.dll的内存几乎没有疑问。 当.dll加载到主机进程时,如何管理内存? .dll是否可以访问主机进程可用的整个内存或只是其中的一部分? 即,当.dll中的函数分配内存时是否存在限制? STL类如dll使用的字符串,向量(动态增加存储)等,在
4回复

在delphi DLL中使用delphi应用程序的内存管理器(无需重新编译应用程序)

我需要编写一个DLL(使用Delphi),该DLL将被动态加载到delphi应用程序中并进行RTTI查询(典型的操作是获取控件属性的字符串值)。 典型的问题是,由于在两者之间使用不同的内存管理器,因此在应用程序和DLL之间传递字符串(和对象)存在问题(这可能会导致内存问题,例如DLL的内存管理