如何加载不可重入的C++/在C#中使用CLI DLL两次?
我正在尝试将C++/CLI DLL加载到我的C#程序中。DLL将其主类公开为单例,因为它包含带有许多全局变量的C代码。因此,不幸的是,DLL是不可重入的。DLL可以连接到硬件的单个实例(由硬件ID标识) 但是,我连接了多个相同硬件,我想将DLL的多个实例加载到我的C#程序中,这样我就可以访问每个硬件 在C#中,是否可以将该C++/CLI DLL多次加载到不同的内存空间中,以便DLL中的全局变量不会相互冲突如何加载不可重入的C++/在C#中使用CLI DLL两次?,c#,c++-cli,reentrancy,C#,C++ Cli,Reentrancy,我正在尝试将C++/CLI DLL加载到我的C#程序中。DLL将其主类公开为单例,因为它包含带有许多全局变量的C代码。因此,不幸的是,DLL是不可重入的。DLL可以连接到硬件的单个实例(由硬件ID标识) 但是,我连接了多个相同硬件,我想将DLL的多个实例加载到我的C#程序中,这样我就可以访问每个硬件 在C#中,是否可以将该C++/CLI DLL多次加载到不同的内存空间中,以便DLL中的全局变量不会相互冲突 为了解决这个问题,我们假设我没有访问C++/CLI DLL的源代码的权限。您不能为每个硬件
为了解决这个问题,我们假设我没有访问C++/CLI DLL的源代码的权限。您不能为每个硬件使用不同的名称多次构建DLL吗?@sturcotte06是的。我可以建造它,比方说,三次。然后会有人来连接4个USB加密狗。在哪里停止?不能多次加载同一DLL。您可以用不同的名称复制它,使其成为一个“不同”的DLL,或者您可以将工作分包给通过您选择的IPC机制进行通信的子进程。后者可能更稳定,因为DLL的设计目的不是加载一次以上,它可能会创建或依赖同名的全局内核对象——这是无法解决的。@Jeroen Mostert。将DLL加载到不同的应用程序域(如果有意义的话)是否能有效地将其置于不同的进程中?生成8个DLL,这样您就可以支持8个USB端口。暴露限制。这就是为什么全球化是坏的;您需要清除作用域,以便在运行时可以有任意数量的作用域。糟糕的设计会带来糟糕的结果。