支持具有全局数据的插件DLL的多个实例
上下文:我将旧版独立引擎转换为组合工具的插件组件.从技术上讲,这意味着我将引擎代码库编译为C DLL,我使用P / Invoke从.NET包装器调用它;包装器实现由组合工具定义的接口.这非常有效,但现在我收到了为不同项目加载多个引擎实例的请求.由于引擎将项目数据保存在一组全局变量中,并且由于具有引擎代码库的DLL仅加载一次,因此加载多个项目意味着项目数据被覆盖.
我可以看到许多解决方案,但它们都有一些缺点: >您可以使用相同的代码创建多个DLL,这些代码被Windows视为不同的DLL,因此不会共享其代码.如果你有不同名称的引擎DLL的多个副本,这可能已经有效.但是,使用DllImport属性从包装器调用引擎,我认为在编译包装器时需要知道引擎DLL的名称.显然,如果我必须为每个项目编译不同版本的包装器,这非常麻烦. stackoverflow社区可以就这些(或其他)解决方案提供一些建议吗?
把整个darn的东西放在C类中,然后对变量的引用会自动找到实例变量.
您可以创建一个指向活动实例的全局指针.这应该是线程本地的(参见__declspec(thread)). 添加extern“C”包装函数,该函数委托给活动实例上的相应成员函数.提供创建新实例,拆除现有实例和设置活动实例的功能. OpenGL使用这个范例产生了很大的效果(参见wglMakeCurrent),找到它的状态数据而不必实际向每个函数传递状态指针. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在Qt5的Windows上使用FreeType
- 如何在Windows cmd中启用ANSI转义码?
- 如何通过Windows工具检查与服务器的连接?
- win7 共享打印机后,客户端连接提示:打印机已删除(0x0000
- wpf – 在没有多点触控的开发机器上测试Windows 7多点触控?
- windows-server-2012-r2 – 如何在实验室中对Windows Serve
- ms-access – Microsoft Access 2007 – 在报告中使用的查看
- windows-server-2008-r2 – 使用WSUS的Windows Server 2008
- .net – 为什么System.Environment.MachineName值大写?
- windows – 为什么模拟会话中定义的DOS设备不会出现在资源管