ActiveX相关

一、ActiveX控件重命名

通过新建VS2005中的“MFC ActiveX Control”项目开发的ActiveX控件,需要改名字。

 开始在工程配置中修改了输出文件的名字,也修改了*.idl及*.def文件中与控件名字相关的字符串,但是在系统中注册之后显示的仍然是之前的名字。

 后来发现控件名字是在工程中以ctrl为后缀的*.cpp文件中的“IMPLEMENT_OLECTLTYPE”这句确定的,其中第二个参数以“IDS_”开头,其对应的字符串值在资源中的“StringTable”中定义,修改这一个字符串值就可以完成ActiveX控件的重命名。


二、使用同一个vs工程开发两个ActiveX控件

最近开发两个基于MFC的ActiveX控件,这两个ActiveX控件几乎有80%的功能是一致的,如果分成两个工程分别开发,需要做好相同功能部分的同步,给代码维护增加麻烦。于是在同一个“MFCActiveX Control”工程中,使用“#ifdef…#endif”方式区分属于不同控件的代码。

减少代码来回修改,宏定义可以不写在代码中,在工程配置的“C/C++->Preprocessor->PreprocessorDefinitions”中可以添加自定义宏。

另外,针对不同可以添加工程配置项,添加方法如下图。于是针对不同的工程配置项都可以进行独立的“宏定义”、“是否预编译头”、“相关def文件路径”、“编译输出文件名”、“文件是否包含在工程中被编译”等工程相关配置。

 使用同一个vs工程开发两个ActiveX控件

但是仅仅这样每次编译只能选择生成一个ActiveX控件,之前的另一个ActiveX控件将被覆盖,且注册到系统后显示的控件名字是一样的。这是因为两个控件的*.idl文件中使用的uuid是相同的,而注册到系统后的控件名字与编译输出的*.ocx文件的名字是无关的。

于是对两控件分别添加定制的工程配置项,不同工程配置中使用各控件对应的新建的*.idl和*.def文件。*.idl文件中的uuid可以通过如下图所示的VS自带的工具生成,保持格式一致即可。关于uuid,除了*.idl文件之外,还有工程主cpp文件中的“constGUID CDECL BASED_CODE _tlid=…”语句和Ctrl后缀的*.cpp文件中的“const IID BASED_CODEIID_D** = …”、“const IID BASED_CODEIID_D**Events = …”、“IMPLEMENT_OLECREATE_EX”语句,分别与*.idl中的第一个uuid(即Lib后缀library的uuid)、第二个uuid、第三个uuid(与控件事件有关)和*.idl中的最后一个uuid(即Classinformation相关uuid)相对应,只是书写格式不同。其中第二个uuid和第三个uuid如果不一致编译可通过,但是控件的事件将无法正常触发。

使用同一个vs工程开发两个ActiveX控件


猜你喜欢

转载自blog.csdn.net/zwz1984/article/details/74452292
今日推荐