如何在Native Visual C++中轻松使用COM组件

And*_*asT 8 c++ com activex visual-c++

我正在尝试构建一个在本机C++中使用VisualStudio '05中的COM组件的应用程序.MSDN中原生和管理的事物的混合完全破坏了我的大脑.(我认为MSDN在这方面是一团糟)我需要一个简短的原生C++代码示例来加载我的Component并使其可用.我很好用编译器创建包装器等.

请不要建议我使用基于对话框的MFC示例,因为它不适用于此组件,并且本身就是一大堆c ...代码.

这可能是本机com与托管com的问题吗?

我完全迷失了,请给我一些支持......

编辑:谢谢你的帮助.我的问题是我所拥有的只是一个注册的dll(实际上是OCX,见下文).我(个人)知道界面应该是什么样的,但我该如何告诉我的程序?没有标题可以定义我可以使用的接口的ID.但我读到c ++编译器可以为我提取并包装它.有谁知道这是怎么做的?

澄清:我只有OCX和组件文档中的线索,它应该公开哪些方法.

jus*_*tyy 7

我的博客文章中的完整工作示例(正是您所需要的):如何从 Visual Studio C++ 调用 COM 对象?

// https://helloacm.com/how-to-call-com-object-from-visual-studio-c/
#include <iostream>
#include <objbase.h>
#include <unknwn.h>
#include <Propvarutil.h>
#import "wshom.ocx" no_namespace, raw_interfaces_only  

using namespace std;

int main() {
    HRESULT hr;
    CLSID clsid;
    CoInitializeEx(nullptr, COINIT_MULTITHREADED);  
    CLSIDFromProgID(OLESTR("WScript.Shell"), &clsid);   
    IWshShell *pApp = nullptr;
    hr = CoCreateInstance(clsid, nullptr, CLSCTX_INPROC_SERVER, __uuidof(IWshShell), reinterpret_cast<LPVOID *>(&pApp));
    if (FAILED(hr) || pApp == nullptr) {
        throw "Cannot Create COM Object";
    }
    int out;
    VARIANT s;
    InitVariantFromInt32(0, &s);
    VARIANT title;
    InitVariantFromString(PCWSTR(L"title"), &title);
    VARIANT type;
    InitVariantFromInt32(4096, &type);
    BSTR msg = ::SysAllocString(L"Hello from https://helloacm.com");
    pApp->Popup(msg, &s, &title, &type, &out);
    CoUninitialize();
    cout << "Out = " << out;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)