.NET进程外COM对象在API调用中共享静态实例
||
很难解释我们的立场。
我们有一个三层应用程序。引擎是用C ++编码的DLL,然后我们有一个VB6 ActiveX EXE,可以通过API调用来访问引擎,并且在顶层,我们有一个Excel插件(在C#中使用VSTO框架)使用互操作DLL调用中间层。此时,从外接程序到引擎的每个“连接”都会创建一个新的EXE(VB6使用API调用来访问引擎),并且一切正常。
现在我们将中间层移到.NET,它可以正常运行(通过所有单元测试),但是,当我们同时打开2个“连接”时,发现一个错误(ups,没有单元)测试一下这种情况,因为它是一种新行为)。 DLL具有静态对象,该对象在同一进程中的所有实例之间共享,并且我们在“连接”之间具有交互作用。在我们的旧版本中,每个“连接”都会创建一个新的EXE,并且进程之间没有内存共享,现在它是同一进程,并且它们共享内存和静态对象。
遵循此问题的提示。我们试图在C#中构建一个COM EXE,以在中间层执行进程外对象,但结果相同。它们共享静态对象,最后,每个连接都不创建独立的进程。
很明显,但此时负担不起,可以将API调用移至ATL或将静态对象更改为带有句柄的可实例化引用,并更改所有API调用以获取/设置此处理程序。我查看了MS All-in-one中的所有示例,但没有找到任何解决方案。不可能一次仅保持一个连接,每个工作簿都可以具有一个连接,并且将来我们希望探索同时具有多个连接的Web应用程序。
有什么建议吗?
提前致谢,
没有找到相关结果
已邀请:
3 个回复
呸溉
磐乓铝举
诉嘎归亮