一步一步教你用VC纯资源dll解决国际化问题 2010-8-24 11:22

一步一步教你用VC纯资源dll解决国际化问题这的确是个老话重谈了,因为这里面确实也没有什么可以称的上技术含量的,只是实现起来有点烦琐,不过我还是要写出来,希望刚接触这方面的同行们不至于走太多的弯路。

图片

  由于MFC应用程序也有自己的资源文件,当你调用MFC函数比如 CString::LoadString 或其它 LoadIcon 时,MFC应用程序框架首先跟踪搜索EXE文件的资源,然后才是DLL和MFC的资源,因此在使用纯资源DLL时候,必须人为先改变资源的搜索顺序,可以通过使用 AfxSetResourceHandle 函数来实现,具体实现如下:

BOOL CMultilanguageApp::InitInstance()
{
AfxEnableControlContainer();

if (m_bChinese)
{
m_hLangDLL=::LoadLibrary("chinese.dll");
}
else
{
m_hLangDLL=::LoadLibrary("english.dll");
}

AfxSetResourceHandle(m_hLangDLL);

……
}

下面开始谈谈具体的实现步骤。

一、创建主工程

步骤:

  1. 运行Visual Studio 6.0->File->New...->Projects;选择Mfc AppWizard(exe),在右边Project name下输入multilanguage, 下一步选择支持中文就可以呢;
  2. 从项目中移出所有的资源文件,把Resource面板中的所有文件移出,把FileView面板中的multilanguage.rc,Resource.h,以及Resource Files下的所有文件移出。(说明:移出的文件并不是从实际的文件目录中删除掉)

二、创建英文版的DLL

步骤:

  1. 运行Visual Studio 6.0->File->New...->Projects;选择Mfc AppWizard(dll),在右边Project name下输入english, 下一步选择 Regular Dll Using share MFC DLL,单击Finish就可以了;
  2. 删除不需要的文件:把Resource面板中的所有文件移出,把 FileView 面板中的english.rc,Resource.h,以及Resource Files下的所有文件移出,然后也可以从实际目录中删除掉;
  3. 复制相关的资源文件:把multilanguage目录下的multilanguage.rc,Resource.h文件复制到english工程文件目录下,还需要把 multilanguage/res 下的所有文件复制到english/res目录下(这样操作起来简单,当然你可以根据需要,选择复制的文件);
  4. 把3步复制的所有文件添加到项目中去;
  5. 把所有的中文的资源名修改为相关的英文资源,同时需要把支持的语言改为“english(U.S.).",把Project菜单 Setting 对话框中 Resource 标签的缺省文字改为"english(U.S.).”,还需要在Resource标签下删
    除预处理定义中的"_AFXDLL"。这样用户的链接库包含通用的MFC资源;
  6. 然后编译建立动态链接库就OK了;

三、创建中文版的DLL

  具体的方法同创建英文版的DLL一样,把项目名改为chinese.只是从 Project 菜单中选择 Setting… 选项。然后在Link标签下"Project Options" 添加 "/NOENTRY" 选项。最后,编译并建立动态链接库。

四、修改 multilanguage工程

在 CMultilanguageApp 类中添加如下的成员变量:

private:
BOOL m_bChinese;
HINSTANCE m_hLangDLL;

构造函数中初始化:

CMultilanguageApp::CMultilanguageApp()
{
m_bChinese = TRUE;
m_hLangDLL = NULL;
}

在InitInstance()函数修改资源加载顺序:

BOOL CMultilanguageApp::InitInstance()
{
AfxEnableControlContainer();

if (m_bChinese)
{
m_hLangDLL=::LoadLibrary("chinese.dll");
}
else
{
m_hLangDLL=::LoadLibrary("english.dll");
}

AfxSetResourceHandle(m_hLangDLL);

……
}

别忘了ExitInstance()函数释放掉加载的dll资源

int CMultilanguageApp::ExitInstance()
{
if(m_hLangDLL)
AfxFreeLibrary(m_hLangDLL);
return CWinApp::ExitInstance();
}

最后编译运行!

小结

以上的方法实现了中英文软件界面,不过,只要稍做扩展,很容易实现对多语言的支持。

本文来自vckase。作者是江上飞鸟。原文地址是:http://www.vckbase.com/document/viewdoc/?id=1567。在此转载,谢谢作者,也谢谢我的同事max。

关于vc6.0的控件ID在多语言时会出现乱码,那是因为rc文件是ANSI编码方式的。解决办法是:用记事本打开rc文件然后另存为Unicode格式的就可以了。这时候又出现一个问题就是在vc6的环境下打不开如此文件,提示是文件出错,产生的原因是vc6不支持Unicode编码,需要在2005以上的版本编译生成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 通达信缠论插件是基于VC 2010编写的,下面我将用图文的形式,一步步教你编写k线包含处理。 第一步:创建项目 在VC 2010中,依次选择“文件”-“新建”-“项目”,选择“Win32项目”。填写项目名称,选择保存路径,点击“确定”按钮。 第二步:设置项目属性 在解决方案资源管理器中,右击项目名称,选择“属性”。 在“属性页”中选择“配置属性”-“常规”,将“项目类型”更改为“动态链接库(.dll)”。 在“属性页”中选择“配置属性”-“常规”,将“字符集”更改为“使用多字节字符集”。 点击“应用”按钮,再点击“确定”按钮。 第三步:添加头文件 在解决方案资源管理器中,右击“源文件”文件夹,选择“添加”-“新建项”。 选择“C++文件(.cpp)”,填写文件名称,点击“添加”按钮。 打开新增的文件,在代码编辑器中,添加以下头文件: #include <windows.h> #include <tchar.h> 第四步:编写k线包含处理函数 在代码编辑器中,添加以下函数: BOOL KLineContain(HDC hdc, int x1, int x2, int y1, int y2){ // 在这里编写k线包含处理函数的代码 // ... return TRUE; } 第五步:处理插件入口函数 在代码编辑器中,找到以下函数,并进行修改: BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){ switch(fdwReason){ case DLL_PROCESS_ATTACH: // 在这里进行初始化操作 // ... break; case DLL_PROCESS_DETACH: // 在这里进行清理操作 // ... break; } return TRUE; } 第六步:编译和运行插件 点击“生成”菜单,选择“生成解决方案”。 插件编译完成后,将生成的.dll文件复制到通达信安装目录的“/gpc”文件夹中。 重新打开通达信软件,插件已经加载成功。 以上是使用VC 2010编写通达信缠论插件的步骤,通过这个插件,你可以方便地进行k线包含处理。希望对你有帮助! ### 回答2: 通达信是一款流行的股票分析软件,而编写通达信插件是一项常见的需求。本文将用图文详细说明,在使用VC 2010编写通达信缠论插件中的第二个步骤,即K线包含处理。 首先,打开VC 2010软件,并创建一个新的项目。选择Visual C++空项目,并为其命名。 接下来,右键单击解决方案资源管理器上的项目名称,并选择添加->新建项。在对话框中选择基于文档的项目,并为其命名。 然后,在解决方案资源管理器中,找到新创建的项目文件,右键单击并选择属性。在属性窗口中,选择常规->字符集,将字符集选项设置为“使用多字节字符集”。 现在,创建一个新的类。右键单击项目文件,并选择添加->类。在类向导对话框中,填写类的名称,并选择该类的类型为“派生自”->“文件”。 在类编辑器中,找到OnRcvMsg函数并打开它。在该函数中,添加代码来处理K线包含逻辑,例如: ```c++ void OnRcvMsg(LPCSTR Msg) { // 从通达信软件接收到的消息处理 if (strstr(Msg, "K线包含处理")) { // 执行K线包含处理逻辑 } else { // 其他逻辑 } } ``` 在K线包含处理逻辑的代码块中,你可以添加任何你认为适合的代码。例如,你可以解析接收到的消息,并根据其中的指令执行相应的操作。 完成以上步骤后,保存并构建项目。确保没有任何错误或警告。如果有错误,可以通过检查代码并纠正错误来解决问题。 总结起来,这就是使用VC 2010编写通达信缠论插件(2-K线包含处理)的步骤。通过创建一个新的类,并在OnRcvMsg函数中添加K线包含处理的代码块,可以开始构建自己的插件。这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。 ### 回答3: 编写通达信缠论插件是一项相对复杂的任务,需要有一定的编程基础和对通达信软件的了解。下面将以图文的方式,一步步教您用VC 2010编写通达信缠论插件中的K线包含处理部分。 第一步:打开VC 2010,创建一个新的项目。选择“Win32控制台应用程序”,命名为“ChanPlugin”。 第二步:在“stdafx.h”中添加必要的头文件,如包含“Windows.h”和“t2sdk.h”,以及定义一些常量和变量。 第三步:在“ChanPlugin.cpp”中,添加一个名为“HandleKLine”的函数来处理K线包含。 第四步:在“HandleKLine”函数中,首先获取通达信软件的K线数据。可以使用通达信提供的API函数来获取K线数据,如“T2SGetKLineData”。 第五步:对获取到的K线数据进行处理,判断K线之间的包含关系。可以使用循环来遍历每个K线,通过比较前后两个K线的最高价和最低价来判断是否有包含关系。 第六步:加入处理包含关系的代码,可以使用条件语句来处理不同的情况。例如,如果前一根K线包含后一根K线,可以做出相应的操作。 第七步:根据需要,在插件中显示处理结果。可以将结果输出到通达信软件的窗口或者绘制到图表上。 第八步:编译并运行插件,将其安装到通达信软件中。测试插件的功能是否正常,并根据需要进行调整和修改。 通过以上步骤,您可以一步步用VC 2010编写通达信缠论插件中的K线包含处理部分。当然,这只是一个示例,实际编写插件时还需要考虑更多的因素和细节。希望以上内容对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值