目前,我有一个具有以下简化 View 的系统。
The entire system run under single process
------------------------------------------
--- DLL0.DLL --- COMMON.DLL (contains global_variable in COMMON.DLL)
EXE ---|
--- DLL1.DLL --- COMMON.DLL (contains global_variable in COMMON.DLL)
COMMON.DLL源码如下。
// COMMON.DLL
#ifdef COMMON_EXPORTS
_declspec( dllexport ) int global_variable = 100;
// Function used to access and print global_variable.
__declspec(dllexport) void common_fun_which_access_global_variable();
#else
_declspec(dllimport) int global_variable;
__declspec(dllimport) void common_fun_which_access_global_variable();
#endif
DLL0.DLL的源码如下。
__declspec(dllexport)
void DLL0() {
printf ("This is DLL0\n");
printf ("In DLL0, global_variable is %i\n", global_variable);
common_fun_which_access_global_variable();
global_variable = 200;
printf ("DLL0 is now setting global_variable to 200\n");
common_fun_which_access_global_variable();
}
DLL1.DLL的源码如下。
__declspec(dllexport)
void DLL1() {
printf ("This is DLL1\n");
printf ("In DLL1, global_variable is %i\n", global_variable);
common_fun_which_access_global_variable();
global_variable = 400;
printf ("DLL1 is now setting global_variable to 400\n");
common_fun_which_access_global_variable();
}
EXE源码如下。
HINSTANCE instance0 = AfxLoadLibrary(_T("DLL0.dll"));
FARPROC fun0 = GetProcAddress(instance0, "DLL0");
HINSTANCE instance1 = AfxLoadLibrary(_T("DLL1.dll"));
FARPROC fun1 = GetProcAddress(instance1, "DLL1");
_fun0();
_fun1();
输出如下。
This is DLL0
In DLL0, global_variable is 100
In COMMON, global_varialbe is 100
DLL0 is now setting global_variable to 200
In COMMON, global_varialbe is 200
This is DLL1
In DLL1, global_variable is 200 <-- I wish 100 is being printed.
In COMMON, global_varialbe is 200 <-- I wish 100 is being printed here too.
<-- I wish DLL0 and DLL1 have their own instance of
<-- global_variable respectively.
DLL1 is now setting global_variable to 400
In COMMON, global_varialbe is 400
整个系统在一个进程中执行。虽然 DLL0.DLL 和 DLL1.DLL 都被显式加载,但依赖项 COMMON.DLL 只会被加载一次 在整个应用程序生命周期中。 EXE 不会加载相同的 COMMON.DLL 两次。
有什么办法,我可以在不违反其中一条规则的情况下实现以下目标?
global_variable 实例吗?global_variable必须是全局的,并且重新放在COMMON.DLL里面?COMMON.DLL 将使用 LIB 文件通过隐式链接加载。COMMON.DLL 重命名为 COMMON-DLL0.DLL 和 COMMON-DLL1.DLL。global_variable 的值,则从 DLL0 调用 common_fun_which_access_global_variable 应该可以访问 DLL0 的更改值。但是,从 DLL1 调用 common_fun_which_access_global_variable 不应实现更改。** 我知道这太多了。但我现在正在处理遗留代码。你知道:)
并排组装能解决这类问题吗?我的理解是,side-by-side assembly是用来解决多个同名不同版本的DLL的问题。我不确定它是否适用于我的上述情况?
或者,我应该反过来问吗?我们如何在同一个 EXE 中加载 2 个 COMMON.DLL 实例?
最佳答案
如果我理解正确的话,COMMON.dll 是遗留代码,遗留代码被 DLL0.dll 和 DLL1.dll 使用。
在不知道所有细节的情况下,我会提出以下建议:
1) 在DLL0.dll和DLL1.dll中创建一个全局变量。
2) 使用 COMMON.dll 的 global_variable 值初始化步骤 1 中的每个全局变量。
3) 根据需要使用两个新的global_variables。
关于c++ - 具有来自同一个 DLL 的全局变量的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5467199/
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?