gpt4 book ai didi

c++ - 如何在 native Visual C++ 中轻松使用 COM 组件

转载 作者:可可西里 更新时间:2023-11-01 17:36:28 26 4
gpt4 key购买 nike

我正在尝试构建一个使用 VisualStudio ´05 中的 COM 组件的应用程序在 native C++ 中。MSDN 中对事物的 native 和托管描述的混合完全破坏了我的脑。 (我认为 MSDN 在这方面一团糟)我需要一个简短的 native C++ 代码示例来加载我的组件并使其可用。我同意编译器创建包装器等。

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

这会是 native com 与托管 com 的问题吗?

我完全迷路了,请给我一些方位……

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

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

最佳答案

来 self 的博客文章的完整示例(正是您所需要的):How to Call COM Object from Visual Studio C++?

// 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;
}

关于c++ - 如何在 native Visual C++ 中轻松使用 COM 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1145768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com