C++如何调用COM组件

时间:2022-09-29 19:08:03
提供了一个dll文件和一份接口文档,其中只给了3个函数的声明,分别是Iopen、Iread、Iclose,声明如下:
HRESULT Iopen([in]int port, [out,retval]int* pVal);
HRESULT Iread([in]int port, [in]BSTR swapCommand, [out]int* retLen, [out]BSTR* retBuff,[out,retval]int* pVal);
HRESULT Iclose([in]int port, [out,retval]int* pVal);
查看DLL导出函数时发现具有标准的4个导出函数DllCanUnloadNow、DllGetClassObject、DllRegisterServer、DllUnregisterServer。
另外,有一个html测试文件,其中有一行是:<OBJECT ID="ICClass" CLASSID="CLSID:CFBFE3C9-0EC0-4BB9-A2B9-5BAA12595223"></OBJECT>
另外还有一个调用Iopen的JavaScript:
<SCRIPT LANGUAGE="JavaScript">
function IOpen()
{
document.all.SelectICCard.style.display="";
var retval = document.all.ICClass.Iopen(1);
document.all.result.value="选择卡座命令返回:"+retval;
document.all.SelectICCard.style.display="";
}
</SCRIPT>


请问我要怎么编写C/C++代码才能调用者3个函数?

9 个解决方案

#1


class CSingleton
{
private:
CSingleton() //构造函数是私有的
{
}
static CSingleton *m_pInstance;
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL) //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pInstance;
}
};
 来自单例模式 百度百科

#2


引用 1 楼 xydp1987108 的回复:
class CSingleton
{
private:
CSingleton() //构造函数是私有的
{
}
static CSingleton *m_pInstance;
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL) //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pInstance;
}
};
 来自单例模式 百度百科
  sorry  发错帖子了

#3


使用 CreateInstance 和 CLSID 创建实例,并导出 IDispatch 接口。

然后使用 IDispatch 接口 的 GetIDsOfNames 导出 DISPID。
然后使用 Invoke 呼叫。


不过既然给你了 接口文档,可以直接使用文档提供的接口。
不需要使用 IDispatch 接口,这样呼叫方法更简单。

#4


您好,我所有的资源都已近传到网上了:http://yunpan.cn/cspQQwVsVnyEZ (提取码:1a9c)
以前都是直接调用dll导出函数,没做个COM的,谢谢!

#5


看看这种 ASP 调用com组件,原理应该差不多的
http://download.csdn.net/download/microsoft2180/2097722

#6


你应该明白这个dll是实现什么功能的(dll的自述文件或说明文档中应该有),它给你了3个函数声明Iopen、Iread、Iclose应该是在头文件中,所以你要做的事情就很简单了,我以在VS2010开发环境为例:
1,将dll放在你工程要生成的exe文件所在的文件夹中,目的就是运行exe文件时需要这个dll。
2,将包含上面三个函数声明的头文件添加到你的项目中,这个楼主应该知道。
3,最关键的就是你的工程的某个或多个功能模块去调用这三个函数了,所以你只要根据函数声明穿进去相应的实参就OK了,别忘了在调用的这三个函数的cpp文件中#include 相应的头文件。

上面的步骤是windows下的通用实用方法,Linux下也是类似

#7


你确定能够在网页中正确运行吗?

#8


谢谢大家了,我知道怎么做呢! 用工具导出一个***.h文件和一个***_i.c用于开发就OK了!

#9


你好,我现在也是遇到这样的问题,厂家给我的是com的dll,我要怎么调它??

#1


class CSingleton
{
private:
CSingleton() //构造函数是私有的
{
}
static CSingleton *m_pInstance;
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL) //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pInstance;
}
};
 来自单例模式 百度百科

#2


引用 1 楼 xydp1987108 的回复:
class CSingleton
{
private:
CSingleton() //构造函数是私有的
{
}
static CSingleton *m_pInstance;
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL) //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pInstance;
}
};
 来自单例模式 百度百科
  sorry  发错帖子了

#3


使用 CreateInstance 和 CLSID 创建实例,并导出 IDispatch 接口。

然后使用 IDispatch 接口 的 GetIDsOfNames 导出 DISPID。
然后使用 Invoke 呼叫。


不过既然给你了 接口文档,可以直接使用文档提供的接口。
不需要使用 IDispatch 接口,这样呼叫方法更简单。

#4


您好,我所有的资源都已近传到网上了:http://yunpan.cn/cspQQwVsVnyEZ (提取码:1a9c)
以前都是直接调用dll导出函数,没做个COM的,谢谢!

#5


看看这种 ASP 调用com组件,原理应该差不多的
http://download.csdn.net/download/microsoft2180/2097722

#6


你应该明白这个dll是实现什么功能的(dll的自述文件或说明文档中应该有),它给你了3个函数声明Iopen、Iread、Iclose应该是在头文件中,所以你要做的事情就很简单了,我以在VS2010开发环境为例:
1,将dll放在你工程要生成的exe文件所在的文件夹中,目的就是运行exe文件时需要这个dll。
2,将包含上面三个函数声明的头文件添加到你的项目中,这个楼主应该知道。
3,最关键的就是你的工程的某个或多个功能模块去调用这三个函数了,所以你只要根据函数声明穿进去相应的实参就OK了,别忘了在调用的这三个函数的cpp文件中#include 相应的头文件。

上面的步骤是windows下的通用实用方法,Linux下也是类似

#7


你确定能够在网页中正确运行吗?

#8


谢谢大家了,我知道怎么做呢! 用工具导出一个***.h文件和一个***_i.c用于开发就OK了!

#9


你好,我现在也是遇到这样的问题,厂家给我的是com的dll,我要怎么调它??