【发布时间】:2010-09-06 06:50:41
【问题描述】:
我想快速测试一个 ocx。如何在控制台应用程序中删除该 ocx。我在 CodeProject 中找到了一些教程,但不完整。
【问题讨论】:
标签: c++ visual-c++ console activex
我想快速测试一个 ocx。如何在控制台应用程序中删除该 ocx。我在 CodeProject 中找到了一些教程,但不完整。
【问题讨论】:
标签: c++ visual-c++ console activex
OCX 不是 ActiveX 用户控件吗? (您放在表单上供用户交互的东西)?
我所知道的测试 COM/ActiveX 最简单的方法是使用 excel。 (是的,我知道这听起来很愚蠢,请耐心等待)
Alt+F11 启动 Visual Basic 编辑器(如果您有 excel 2007,它位于“开发人员”功能区选项卡上现在你已经进入了快乐的视觉基础领域......
Tools 菜单中,选择References
Browse... 查找未向 COM 注册的文件 - 如果您的 OCX 已注册,您可以跳过此步骤。Insert 菜单中,选择UserForm
Toolbox窗口中,右键单击并选择Additional Controls
Run 菜单运行它。测试您的 OCX 并使用它。
保存 EXCEL 文件,这样您就不必每次都重复这些步骤。
【讨论】:
当然..这很容易。这是我拼凑的一个有趣的应用程序。我假设你有 Visual C++。
保存到test.cpp并编译:cl.exe /EHsc test.cpp
要使用您的 OCX 进行测试,您需要 #import 类型库并在 CoCreateInstance 调用中使用它的 CLSID(或仅硬编码 CLSID)。使用 #import 还有助于定义您可能需要的任何自定义接口。
#include "windows.h" #include “shobjidl.h” #include “atlbase.h” // // 编译:cl /EHsc test.cpp // // 一个有趣的小程序来演示如何创建 OCX。 //(在这种情况下为 CLSID_TaskbarList) // BOOL CALLBACK RemoveFromTaskbarProc(HWND hwnd, LPARAM lParam) { ITaskbarList* ptbl = (ITaskbarList*)lParam; ptbl->删除选项卡(hwnd); 返回真; } 无效 HideTaskWindows(ITaskbarList* ptbl) { EnumWindows(RemoveFromTaskbarProc, (LPARAM) ptbl); } // ============= BOOL CALLBACK AddToTaskbarProc(HWND hwnd, LPARAM lParam) { ITaskbarList* ptbl = (ITaskbarList*)lParam; ptbl->AddTab(hwnd); return TRUE;// 继续枚举 } 无效 ShowTaskWindows(ITaskbarList* ptbl) { if (!EnumWindows(AddToTaskbarProc, (LPARAM) ptbl)) 抛出“无法在 ShowTaskWindows 中枚举窗口”; } // ============= int main(int, char**) { 共同初始化(0); 尝试 { CComPtr【讨论】:
@orion 太酷了。从来没有这样想过。
@jschroedl 确实很有趣。
在控制台应用程序中测试 activex 很有趣。但我认为不值得尝试这条路。您可以通过@jschroedl 解释的方式调用方法或设置和获取属性,也可以通过 Invoke 函数调用 IDIspatch 对象。
第一步是GetIDsByName,通过Invoke调用函数,函数的参数应该是Invoke形参列表中的VARIANTS数组。
一切都很好,花花公子。但是,一旦您参加活动,它就会从那里走下坡路。 Windows 应用程序需要消息泵来触发事件。在控制台上你没有。我沿着路径为事件实现 EventNotifier,就像您以经典 C++ 方式实现 CallBack 接口一样。但是事件不会到达您实现的界面。
我很确定这不能在控制台应用程序上完成。但我真的希望有人在控制台应用程序中对事件有不同的看法
【讨论】: