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

最佳答案

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

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

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

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

//
//编译: cl/EHsc test.cpp
//

//一个有趣的小程序,用于演示创建 OCX。
//(在本例中为 CLSID_TaskbarList)
//

bool 回调 RemoveFromTaskbarProc( HWND hwnd, LPARAM lParam )
{
ITaskbarList* ptbl = (ITaskbarList*)lParam;
ptbl->DeleteTab(hwnd);
返回真;
}

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

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

bool 回调 AddToTaskbarProc( HWND hwnd, LPARAM lParam )
{
ITaskbarList* ptbl = (ITaskbarList*)lParam;
ptbl->AddTab(hwnd);

return TRUE;//继续枚举
}

无效 ShowTaskWindows(ITaskbarList* ptbl)
{
if (!EnumWindows(AddToTaskbarProc, (LPARAM) ptbl))
throw "无法在 ShowTaskWindows 中枚举窗口";
}

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

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

尝试 {
CComPtr pUnk;

if (FAILED(CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**) &pUnk)))
throw "无法创建 CLSID_TaskbarList";

//对对象做一些事情...

CComQIPtr ptbl = pUnk;
如果(ptbl)
ptbl->hrinit();

隐藏任务窗口(ptbl);
MessageBox( GetDesktopWindow(), _T("查看任务栏!"), _T("StackOverflow FTW"), MB_OK);
ShowTaskWindows(ptbl);
}
捕获(TCHAR * 消息){
MessageBox(GetDesktopWindow(), msg, _T("Error"), MB_OK);
}

CoUninitialize();

返回0;
}

关于c++ - 在控制台应用程序中使用 ocx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17928/

10-11 11:36