只拿到一个com组件,有什么办法可以获得com组件中的对象、函数,并调用?该怎么处理
只拿到一个com组件,有什么办法可以获得com组件中的对象、函数,并调用?
Hi,
如果我们只拿到一个com组件,没有任何的.C、.h文件,
有什么办法可以获得com组件中的对象、函数,并调用它么?
------解决方案--------------------
#import "com.dll"
自动生成类型包装信息
------解决方案--------------------
以上两种方式皆可,推荐第一种,插入COM组件,自动生成类。
------解决方案--------------------
没有必要那么麻烦,为什么要去生成文件呢?
给你我我是ADO组件的范例:
1、在stdafx.h投机添加:
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF")
注意:路径要指定正确,尤其是相对路径的化!
2、在代码中使用组件:
Hi,
如果我们只拿到一个com组件,没有任何的.C、.h文件,
有什么办法可以获得com组件中的对象、函数,并调用它么?
------解决方案--------------------
#import "com.dll"
自动生成类型包装信息
------解决方案--------------------
以上两种方式皆可,推荐第一种,插入COM组件,自动生成类。
------解决方案--------------------
没有必要那么麻烦,为什么要去生成文件呢?
给你我我是ADO组件的范例:
1、在stdafx.h投机添加:
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF")
注意:路径要指定正确,尤其是相对路径的化!
2、在代码中使用组件:
- C/C++ code
STDMETHODIMP CCompensateManager::GetCompensate(long id, ICompensate **pCompensate) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here _ConnectionPtr adoConn; _RecordsetPtr m_rec; _variant_t val; //列值 CString sql; DataCmn::ICompensatePtr pTempCompensate; HRESULT hr; try { hr = adoConn.CreateInstance(__uuidof(Connection)); hr = m_rec.CreateInstance(__uuidof(Recordset)); hr = adoConn->Open((BSTR)m_ConnectionString, L"", L"", adCmdUnspecified); pTempCompensate.CreateInstance(__uuidof(User)); sql.Format(_T("select * from VIEW_Compensate where ID=%d "),id); hr=m_rec->Open((LPCTSTR)sql, (IDispatch*)adoConn, adOpenUnspecified, adLockUnspecified, adCmdUnspecified); 。。。。 } catch(_com_error e) { if(e.Description().length()>0) return AtlReportError(__uuidof(CompensateManager), (BSTR)e.Description(), IID_ICompensateManager, e.Error()); else return AtlReportError(__uuidof(CompensateManager), e.ErrorMessage(), IID_ICompensateManager, e.Error()); } return S_OK; }
------解决方案--------------------
如果有个COM组件的名称是Test,输出接口是ITest。你可以在用到该com组件的头文件内编写import "Test.dll" no_namespace将com组件导入,然后再写以下代码:
ITestPtr m_TestPtr;
HRESULT hr = m_TestPtr.CreateInstance(__uuid(Test));
if(SUCCEEDED(hr)
{
hr = m_TestPtr.需要调用的函数名;
}
------解决方案--------------------
这个COM组件要是实现了IDispatch接口。。那就什么都好说,要是没实现就白扯了吧