我想快速测试一个ocx。如何将该 ocx 放入控制台应用程序中。我在 CodeProject 中找到了一些教程,但不完整。

有帮助吗?

解决方案

当然..这很容易。这是我整理的一个有趣的应用程序。我假设你有 Visual C++。

保存到test.cpp并编译:cl.exe /EHsc 测试.cpp

要使用 OCX 进行测试,您需要#import typelib 并在 CoCreateInstance 调用中使用它的 CLSID(或者只是硬编码 CLSID)。使用 #import 还有助于定义您可能需要的任何自定义接口。

#include "windows.h"
#include "shobjidl.h"
#include "atlbase.h"

//
// compile with:  cl /EHsc test.cpp
//

// A fun little program to demonstrate creating an OCX.
// (CLSID_TaskbarList in this case)
//

BOOL CALLBACK RemoveFromTaskbarProc( HWND hwnd, LPARAM lParam )
{
    ITaskbarList* ptbl = (ITaskbarList*)lParam;
    ptbl->DeleteTab(hwnd);  
    return TRUE;
}

void HideTaskWindows(ITaskbarList* ptbl)
{
    EnumWindows( RemoveFromTaskbarProc, (LPARAM) ptbl);
}

// ============

BOOL CALLBACK AddToTaskbarProc( HWND hwnd, LPARAM lParam )
{
    ITaskbarList* ptbl = (ITaskbarList*)lParam;
    ptbl->AddTab(hwnd); 

    return TRUE;// continue enumerating
}

void ShowTaskWindows(ITaskbarList* ptbl)
{
    if (!EnumWindows( AddToTaskbarProc, (LPARAM) ptbl))
        throw "Unable to enum windows in ShowTaskWindows";
}

// ============

int main(int, char**)
{
    CoInitialize(0);

    try {
        CComPtr<IUnknown> pUnk;

        if (FAILED(CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**) &pUnk)))
            throw "Unabled to create CLSID_TaskbarList";


        // Do something with the object...

        CComQIPtr<ITaskbarList> ptbl = pUnk;
        if (ptbl)
            ptbl->HrInit();

        HideTaskWindows(ptbl);
        MessageBox( GetDesktopWindow(), _T("Check out the task bar!"), _T("StackOverflow FTW"), MB_OK);
        ShowTaskWindows(ptbl);
    }
    catch( TCHAR * msg ) {
        MessageBox( GetDesktopWindow(), msg, _T("Error"), MB_OK);
    }       

    CoUninitialize();

    return 0;
}

其他提示

OCX 不是 ActiveX 用户控件吗?(您放在表单上供用户交互的东西)?

据我所知,测试 COM/ActiveX 内容的最简单方法是使用 Excel。(是的,我知道这听起来很愚蠢,请耐心等待)

  1. 运行 Excel,如果它没有为您完成此操作,则创建一个新文件
  2. Alt+F11 启动 Visual Basic 编辑器(如果您有 excel 2007,它位于“开发人员”功能区选项卡上

现在你已经进入了快乐的视觉基础世界......

  1. 来自 Tools 菜单,选择 References
  2. 从列表中选择 OCX/COM 对象,或单击 Browse... 如果该文件未在 COM 中注册,则查找该文件 - 如果您的 OCX 已注册,您可以跳过此步骤。
  3. 来自 Insert 菜单,选择 UserForm
  4. 在漂浮的 Toolbox 窗口,右键单击并选择 Additional Controls
  5. 在列表中找到您的 OCX 并勾选它
  6. 然后您可以将 OCX 从工具箱拖到用户窗体上
  7. 来自 Run 菜单,运行它。
  8. 测试你的 OCX 并使用它。

  9. 保存 Excel 文件,这样您就不必每次都重复这些步骤。

@orion 那太酷了。从来没有这样想过。

嗯@jschroedl 那确实很有趣。

在控制台应用程序中测试 activex 很有趣。但我认为不值得尝试这条路。您可以通过 @jschroedl 解释的方式调用方法或设置和获取属性,也可以通过 Invoke 函数调用 IDIspatch 对象。

第一步是 GetIDsByName 并通过 Invoke 调用函数,函数的参数应该是 Invoke 形参列表中的 VARIANTS 数组。

一切都很好,花花公子。但一旦你参加了活动,事情就开始走下坡路了。Windows 应用程序需要消息泵来触发事件。在控制台上你没有。我沿着路径为事件实现 EventNotifier,就像以经典 C++ 方式实现 CallBack 接口一样。但事件不会到达您实现的接口。

我很确定这不能在控制台应用程序上完成。但我真的希望有人会对控制台应用程序中的事件有不同的看法

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top