创建 ActiveX EXE 部件

博客介绍创建新的ActiveX EXE部件的步骤,包括决定部件功能、划分对象、设计窗体与接口等,还提到创建独立测试工程,在添加接口元素时添加性能到测试工程测试新功能,最后编译Exe并用目标应用程序测试。

2004年12月7日  23:55:46


0.部件以对象方式提供可重用代码。通过创建对象并调用其属性和方法来使用部件的代码的应用程序,被称作客户,相对于使用部件对象的客户端而言,部件可以运行于进程内或进程外。进程外部件或 ActiveX EXE,在自己的地址空间中运行。而客户通常是运行在其它进程中的应用程序。
1.进程外部件运行在自己的进程中,这意味着客户端可以通知部件做某事,然后当部件工作时客户端可以继续它自己的工作。当这样的系统正确建立后,部件能在任务结束时使用异步通知来通知客户端,这在“建立代码部件”的“异步的回调与事件”中解释。
2.在类模块中被声明成 Public 的枚举型被添加到部件的类型库中。它与在其中定义它的类没有联系,但会成为全局名空间的一部分。(佛山83272853)
3.当 Visual Basic 包含 vbModal 和 vbModeless 时,为什么还要提供自己的常数呢?这些部件也许和不提供这些常数的开发工具一起使用。提供与 Visual Basic 兼容的常数是灵活的解决方案。
4.由进程外部件显示的与由进程内部件显示的模式和无模式窗体同客户应用程序的窗体的关系不同。首先,进程外部件显示的窗体不依赖于客户应用程序。它的生命期也不依赖于客户的生命期。其次,加载的窗体可以防止进程外部件的可执行程序被卸载。
5.一旦把 ActiveX EXE 工程放到运行状态,它就一直保持运行状态。这对于测试是非常方便的,但它的运转不同于做好的 .exe 文件。当最后的客户释放了最后的对由部件提供的对象的引用时,进程外部件的可执行程序就卸载了,所以进程外代码部件一般不是显示窗体的最好方法。
6.为客户提供异步通知是进程外部件最有趣的用途之一,也就是,当部件执行方法时,客户没有保持阻塞状态,当部件执行某个任务上或等待某事发生时,客户继续做自己的事务。部件的通知突然来到时,在客户部分没有任何特殊的行动。
7.使用在进程外部件中的窗体的对象,在这些窗体用完后要把它们释放掉。
8.用事件来提供通知的好处之一是只需要一次引用。也就是,TestForm 不需要引用 CoffeeMonitor 对象来使 Timer 控件给 CoffeeMonitor 发送事件。这避免了“部件设计的一般准则”的“循环引用的处理”中描述的循环引用问题。
9.当然,认真的程序员希望确保得到咖啡通知,而不管正在使用什么应用程序。可以为每个希望得到通知的程序创建独立的 CoffeeMonitor 对象,但如果计算机没有那么多串行口,这样做就不行。
10.正如对象应该释放掉它创建的所有窗体一样,它们应当释放掉它所使用的所有对象。因为对全局 CoffeeMonitor 的引用是在全局变量中,最后一个连接器对象必须把它释放。
11.当所有的客户都释放了对对象的引用时,已编译了的进程外部件才关闭,除非它具有一个加载的窗体。在编译时, TestForm 一直在运行 Coffee 部件,而 CoffeeMonitor 保持着对 TestForm 的引用。因为 CoffeeMonitor 对象利用全局变量而使自身不终止,所以该部件不会关闭。
12.另一种通知客户的技术是异步回调方法,在“使用回调方法的异步通知”中将讨论这种方法。回调实现起来比较困难,但它允许部件接收由客户端产生的返回值和错误,性能也稍好些。
13.没有用户接口的代码部件可以被称作无人监控的执行,这是说它们不与用户交互。对于进程外部件,该选项也能够多线程.


小结:

当创建新的 ActiveX EXE 部件时,一般应用下列步骤:
1.决定要提供的部件功能。
2.在逻辑上,把部件的功能划分给几个对象。
3.设计部件要显示的所有窗体。
4.设计接口,也就是部件提供的各个类的属性、方法和事件。
5.创建独立的测试工程,通常是 Standard Exe 工程。
6.实现部件使用的窗体。
7.实现各个类的接口。
8.当添加每个接口元素或特性时,把性能添加到测试工程中以测试新的功能。
9.编译 Exe 并用所有潜在的目标应用程序来进行测试。

 


 

 


 


 


 

 


 


 


 


 


 

 


 


 


 


 


 


 

 

 


 

 


 


 


 

 

 

在 WinCC 中创建 ActiveX 控件失败可能由多种原因导致,以下是一些常见的问题及其解决方案: ### 1. **ActiveX 控件未正确注册** WinCC 依赖 Windows 注册表来识别和加载 ActiveX 控件(.ocx 文件)。如果控件未正确注册,WinCC 将无法创建该控件。 - 确保控件的 `.ocx` 文件已通过 `regsvr32` 命令注册。以管理员身份运行命令提示符,并输入以下命令: ```cmd regsvr32 ControlName.ocx ``` 如果注册成功,系统会弹出提示框。如果失败,可能是由于权限不足或控件依赖项缺失 [^1]。 ### 2. **权限问题** WinCC 需要足够的权限来访问和加载 ActiveX 控件。如果运行 WinCC 的用户账户没有注册表或文件系统的适当权限,可能会导致控件创建失败。 - 确保当前用户具有对注册表项 `HKEY_CLASSES_ROOT` 和 `HKEY_LOCAL_MACHINE\SOFTWARE\Classes` 的访问权限。 - 尝试以管理员身份运行 WinCC 项目编辑器或运行系统 [^1]。 ### 3. **ActiveX 控件依赖项缺失** 某些 ActiveX 控件依赖于其他 DLL 或运行库(如 Visual C++ Redistributable)。如果这些依赖项未安装,控件将无法加载。 - 检查控件的文档,确认所有依赖项是否已安装。 - 使用工具如 Dependency Walker(`depends.exe`)分析 `.ocx` 文件,查看是否有缺失的依赖项 [^1]。 ### 4. **WinCC 版本与 ActiveX 控件兼容性** 不同版本的 WinCC 对 ActiveX 控件的支持程度不同。某些较新的控件可能不兼容旧版 WinCC。 - 确认所使用的 WinCC 版本是否支持该 ActiveX 控件。 - 检查西门子官方支持文档或更新 WinCC 到最新 SP(Service Pack)版本 [^1]。 ### 5. **项目设置问题** 在 WinCC 项目中添加 ActiveX 控件时,如果项目设置不正确,也可能导致控件创建失败。 - 在 WinCC 项目管理器中,进入“图形运行系统”设置,确保“允许使用 ActiveX 控件”选项已启用。 - 在画面编辑器中插入控件时,检查控件是否出现在“控件工具箱”中。如果没有,尝试手动添加控件 [^1]。 ### 6. **数字签名与安全设置** 某些 ActiveX 控件可能需要数字签名,或由于 Windows 安全策略被阻止加载。 - 在 Internet Explorer 的“Internet 选项”中,检查“安全”标签页下的“自定义级别”,确保 ActiveX 相关选项允许执行。 - 如果控件未签名,可能需要调整组策略或信任该控件 [^1]。 ### 示例:注册 ActiveX 控件并插入 WinCC 画面 ```cmd regsvr32.exe C:\Path\To\YourControl.ocx ``` 插入控件到 WinCC 画面后,可在属性窗口中配置其行为。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值