我正在尝试构建一个在VisualStudio ’05中使用COM组件的应用程序
在本地C.
MSDN中原生和管理的事物的混合完全毁了我的
脑. (我认为MSDN在这方面是一团糟)
我需要一个简短的原生C代码示例来加载我的Component
并使其可用.
我很好用编译器创建包装器等.
在本地C.
MSDN中原生和管理的事物的混合完全毁了我的
脑. (我认为MSDN在这方面是一团糟)
我需要一个简短的原生C代码示例来加载我的Component
并使其可用.
我很好用编译器创建包装器等.
请不要建议我使用基于对话框的MFC示例,因为
它不适用于这个组件,本身就是一个巨大的组件
一堆c …代码.
这可能是本机com与托管com的问题吗?
我完全迷失了,请给我一些支持……
编辑:谢谢你的帮助.
我的问题是我所拥有的只是一个注册的dll(实际上是OCX,见下文)
.我(个人)知道
界面应该是什么样的,但我该如何告诉我的程序?
没有定义的标头
我可以使用的接口的ID.但是我读到了c编译器
可以为我提取并包装它.有谁知道这是怎么做的?
澄清:我只有OCX和文档中的线索
组件,它应该暴露什么方法.
解决方法@H_403_29@
完整的工作示例(正是您所需要的)来自我的博客文章:
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;
}
// 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; }