vs2017 生成com 并 调用

尴尬,昨天开始学习COM, 因为项目采用COM技术进行各模块功能开发。按好几篇博客折腾无果,不知道是环境没有装好还是咋了,在选择添加函数时老是空白,啥都没法选择。还好,现在走通了最基本的。过程如下:

新建项目->ATL (选项暂时不研究,我也搞不懂)然后就有了 Tcom TomPS(暂时也不知道PS是啥,先忽略)



然后在资源管理窗口,点右键,添加新建项目,选择ATL 



然后就有了 xxoo.h 和cpp文件。

正常情况,按各大神的博客,就在类视图里面添加方法就该可以。但是我的环境里面,就如下:


就算点, 后面如下:


。 折腾很久,以为是vs哪个模块没装好。 最后放弃了。

然后通过有些博客里提到 对.idl的改写 添加。(我的理解就是不用这个向导,自己添加,就像MFC

里面加消息相应函数一样)


然后XXOO.h 里面

STDMETHODIMP Aadd(LONG i, LONG* s);


STDMETHODIMP CXXOO::Aadd(LONG i, LONG* s)
{
// TODO: 在此处添加实现代码.
*s = 101;
return 0;

}

然后编译  注册dll 注册bat


然后写个测试代码

#include <iostream>
#include "..\\Tcom\Tcom_i.h"
#include "..\\Tcom\Tcom_i.c"
using namespace std;


int main( ) {
cout << "HHHHH JJJJJ KKKKK" << endl;
HRESULT hr;
IAB *pCom = NULL;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_AB, NULL, 1, IID_IAB, (LPVOID*)&pCom);
if (SUCCEEDED(hr))
{
LONG res(0);
pCom->Aadd(10,&res);
printf("2+3=%d\n", res);
}
CoUninitialize();
//这里是上面流程的测试com 模块 前面的是我开始做过的
cout << "HHHHH JJJJJ KKKKK 2" << endl;
//HRESULT hr;
IXXOO *pCom1 = NULL;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_XXOO, NULL, 1, IID_IXXOO, (LPVOID*)&pCom1);
if (SUCCEEDED(hr))
{
LONG res(0);
pCom1->Aadd(10, &res);
printf("pppp=%d\n", res);
}
CoUninitialize();


system("pause");
return 0;
}

展开阅读全文

没有更多推荐了,返回首页