VS2010调用Com组件

Com组件开发过程中用的不多,资料也不多,故记录开发Com组件中的部分问题。

这一篇文章里,讲解了如何使用VS2010创建Com组件。现在基于该文章创建的Com组件接口,创建VC++项目来调用该接口。

使用流程

新建win32控制台项目。

主文件代码如下:

#include "stdafx.h"
#include "../testCom/testCom_i.h"
#include "../testCom/testCom_i.c"

int _tmain(int argc, _TCHAR* argv[])
{
    HRESULT hr;
    IMyClass *pCom = NULL;
    CoInitialize(NULL);
    hr = CoCreateInstance(CLSID_MyClass,NULL,1,IID_IMyClass,(LPVOID*)&pCom);
    if (SUCCEEDED(hr))
    {
        LONG res;
        pCom->Add(2,3,&res);
        printf("2+3=%d\n",res);
    }
    CoUninitialize();
    return 0;
}

代码说明:

#include "../testCom/testCom_i.h"

#include "../testCom/testCom_i.c"

是将com组件定义接口的文件包含到本工程中,这样操作后才可以在后面直接调用Com接口函数。

调用Com组件前必须调用CoInitialize(NULL);

调用完成后需要释放CoUninitialize();

CoCreateInstance用于创建一个Com实例,函数说明如下:

HRESULT CoCreateInstance(
  __in   REFCLSID rclsid,
  __in   LPUNKNOWN pUnkOuter,
  __in   DWORD dwClsContext,
  __in   REFIID riid,
  __out  LPVOID *ppv
);

rclsid [in]
The CLSID associated with the data and code that will be used to create the object.

pUnkOuter [in]
If NULL, indicates that the object is not being created as part of an aggregate. If non-NULL, pointer to the aggregate object‘s IUnknown interface (the controlling IUnknown). 

dwClsContext [in]
Context in which the code that manages the newly created object will run. The values are taken from the enumeration CLSCTX. 

riid [in]
A reference to the identifier of the interface to be used to communicate with the object.

ppv [out]
Address of pointer variable that receives the interface pointer requested in riid. Upon successful return, * ppv contains the requested interface pointer. Upon failure, * ppv contains NULL.

相关下载

代码下载

时间: 2024-12-13 16:16:54

VS2010调用Com组件的相关文章

C# vs2010 调用webservice

如何调用已经发布的webservice,主要分为2个步骤(vs2010环境 C#) 发布webservice,使其处于服务状态. 创建一个asp.net程序(java等也可以),对webservice的方法进行调用. 发布webservice,可以参见 http://mingsuper.blog.51cto.com/8269088/1439419 创建asp.net 1)创建空的asp.net程序 2)建立测试用的页面,这里不过多叙述 3)增加对webservice的web 引用,在工程上点击右

C#调用htmlfile组件,并执行js函数

前一篇我测试了vba调用htmlfile做反混淆,并执行js函数的代码.本文换成C#实现. 本文地址:http://www.cnblogs.com/Charltsing/p/CSharpEval.html 联系QQ:564955427 C#调用com组件需要使用CreateInstance,当然,我们也可以通过反编译vb.net里面的CreatObject来修改成C#代码.我从网上下载了一个 [SecurityPermission(SecurityAction.Demand, Unmanaged

Jacob调用COM组件总结,实例

转自:http://blog.csdn.net/whw6_faye/article/details/5418506 最近做了一个Java Jacob调用COM组件的东西,其中遇到了不少问题,现在把经验总结一下和大家分享. 1.Jacob安装 Google一下,下载Jacob最新版.我这里用的是Jacob-1.15 把Jacob.jar放到你Java工程的lib目录下,引入项目 Jacob自带了两个dll, jacob-1.15-M3-x64.dll 和jacob-1.15-M3-x86.dll,

Titanium中调用ios组件时语言不是本地化的解决方法

用Titanium开发的ios应用中,当调用系统组件时,尽管手机已经设置了系统语言为中文,但那些组件的界面却仍为英文.比如调用iphone中的相册组件,其界面为: 那么怎么让它跟系统语言保持一致呢? 在原生的ios开发中,只需要在info.plist中把 CFBundleAllowMixedLocalizations 设置为 true 就行了,代表Localized resources can be mixed,就是允许库使用本地语言资源. 那么在Titanium中该怎么做呢? 其实也很简单,T

VC6.0编译DLL,使用VS2010调用问题及解决方法

1.做驱动的时候,做应用程序需要和驱动通信,必须建立一个DLL. 2.因为客户使用版本太低,需要使用到VC6.0编写DLL 3.在VC6.0上编写DLL的时候,导出的函数名会出现和原函数名不对,导致调用失败 4.解决办法, 找到VC6.0工程下面的文件   ***.DEF. 把里面的   LIBRARY  后面输入要导出的DLL的文件名.如: LIBRARY      "pc104dll" 在EXPORTS后面输入要导出的函数名,整个文件内容入下: LIBRARY      "

NET调用Com组件事例

http://blog.csdn.net/shizhiyingnj/article/details/1507948 在程序设计中,往往通过键盘的某个按键来完成相关操作! 下面就来说明如何实现: 1.引入名称空间; using System.Runtime.InteropServices; (由于使用到API(user32.dll) 2.使用API [DllImport("user32.dll", CharSet = CharSet.Auto)]  private static exte

C语言调用COM组件

调用COM组件最简单的语言当然是C++,但在某些情况下,不得不用C语言.本文介绍用C语言调用COM组件的方法. 为了更好的理解C的做法,我们要先看一看C++调用COM组件是怎么做的. 一.C++方式 从 Windows 7 开始,任务栏可以显示进度条,就以这个接口为例吧. ITaskbarList4 *pTaskbar = nullptr; HRESULT hResult = ::CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC

vue组件之间的通信以及如何在父组件中调用子组件的方法和属性

在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据 一.父组件利用props往子组件传输数据 父组件: <div> <child v-bind:my-message="parentMsg"></child>//注意传递参数时要用-代替驼峰命名,HTML不区分大小写 </div> 子组件: Vue.component('child', { // camelCase in Ja

java调用com组件操作word使用总结(jacob)

ava调用com组件操作word使用总结(jacob) 简单描述 在此处输入简单摘要 特别声明:使用java-com技术可以完成任何VBA可以完成的office文档操作; 一.准备工作 先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的.这是一个开始于 1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献. Jacob下载地址: http://s