简单的接口参数调用。
Client端
#import "..\msado15.dll" no_namespace rename("EOF","adoEOF")
#import "..\myDll.dll" no_namespace
客户端调用myDll中的接口IDBMan的Test([in]LPSTR strSql,IUnknown* Record);
{
IDBManPtr myDB;
myDB.CreateInstance(__uuidof(myDll));
_RecordsetPtr myRecord;
myRecord.CreateInstance(__uuidof(Recordset));
myRecord->CursorLocation=adUseClient;
myDB->Test("select * from myTable",(IUnknown*)(&myRecord));
}
COM 端
STDMETHODIMP CDBOperator::Test(LPSTR strSql,IUnknown* Record)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) _RecordsetPtr pRecord; pRecord.CreateInstance(__uuidof(Recordset)); Record->QueryInterface(pRecord.GetIID(),(void**)(&pRecord));//调用queryInterface时出错。// pRecord->Open(strSql,(IDispatch*)m_pConnect,adOpenDynamic,adLockOptimistic,adCmdText);
//本段代码的本意是通过传过来的sql操作语句,和记录集对象,在COM中实现对记录集的统一执行,最终返回一结果记录集。
return S_OK;
}//////////////////////////////////////////////////////////////////////
//程序的意图:
自已写一个接口,其主要是调用msado15.dll中的三个对数据库操作的接口,通过自已的方法,相当于一个公有模块,使客户端直接调用我的方法,即可得到对数据库的访问。且客户端不用导入msado15.dll,直接导入我的动态库即可,希望大家多给点方案及解决意见。
Client端
#import "..\msado15.dll" no_namespace rename("EOF","adoEOF")
#import "..\myDll.dll" no_namespace
客户端调用myDll中的接口IDBMan的Test([in]LPSTR strSql,IUnknown* Record);
{
IDBManPtr myDB;
myDB.CreateInstance(__uuidof(myDll));
_RecordsetPtr myRecord;
myRecord.CreateInstance(__uuidof(Recordset));
myRecord->CursorLocation=adUseClient;
myDB->Test("select * from myTable",(IUnknown*)(&myRecord));
}
COM 端
STDMETHODIMP CDBOperator::Test(LPSTR strSql,IUnknown* Record)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) _RecordsetPtr pRecord; pRecord.CreateInstance(__uuidof(Recordset)); Record->QueryInterface(pRecord.GetIID(),(void**)(&pRecord));//调用queryInterface时出错。// pRecord->Open(strSql,(IDispatch*)m_pConnect,adOpenDynamic,adLockOptimistic,adCmdText);
//本段代码的本意是通过传过来的sql操作语句,和记录集对象,在COM中实现对记录集的统一执行,最终返回一结果记录集。
return S_OK;
}//////////////////////////////////////////////////////////////////////
//程序的意图:
自已写一个接口,其主要是调用msado15.dll中的三个对数据库操作的接口,通过自已的方法,相当于一个公有模块,使客户端直接调用我的方法,即可得到对数据库的访问。且客户端不用导入msado15.dll,直接导入我的动态库即可,希望大家多给点方案及解决意见。
解决方案 »
- [Sharpui]居于dui思想的c++版wpf界面库(免费、开源)
- 橡皮线
- VS2005调试速度
- 迎“五一”界面版结帖返分及最受欢迎专家评比活动结果公示
- 编译器挠头了:两个头文件分别声明同名函数并且有不同实现,main函数文件包含这两个头文件,main中调用该函数,结果是?
- 哪位大侠给我讲讲BITMAP,BITMAPINFOHEADER,PBITMAPINFO,HBITMAP,BITMAPFILEHEADER这些东西之间有什么关系?分不够再开贴
- 各位大虾,一个简单小问题帮帮忙,谢谢!
- 散分,冻结了半年的账号终于可以发贴了,大家支持一下。(斑竹手下留情)
- 哪位网络高手帮我看看这段代码(仿造MSDN里的ping.c代码),执行到recvfrom就停住不前。
- 启动即执行的问题
- sqlserver中存储的韩文,用ADO读出后全是“???”,怎么解决?
- 关于对话框的OnSize的问题
有关com的操作,应该加入HRESULT hr=...;判断返回值再进行下一步操作.
你出的是什么错误?
就直接退出,而且用catch(_com_error err),捕获不到错误,用catch(...)能。
--------------------------------------------------------------------
你能给我一个最简单的IUnknown* 参数的调用吗
msado15.dll中有我需要用到的三个接口:
{_ConnectionPtr,_RecordsetPtr,_CommandPtr}
我想把调用msado15.dll中的接口的方法封装到自已写的myDB.dll中,
比如:{
OpenConnect([in]LPSTR strConnect);
ExecMySql([in]LPSTR strSql,[out]IUnknown* myRecord);
}
但是客户端也同样要有一个记录集对象来保存记录集,我又想只导入一个myDB.dll直接使用,是不是myDB.dll就相当于一个代理接口?代理接口到底是什么呢,它跟被代理之间的多个接口是什么对应关系(如果有无知的话,或我的意思没表达清楚,请愿谅,并请给我指出来)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
HRESULT hr = S_OK;
_RecordsetPtr pRecord = NULL; hr = pRecord.CreateInstance(__uuidof(Recordset));
if(FAILED(hr))
{
....
}
else
{
hr = Record->QueryInterface(pRecord.GetIID(),(void**)(pRecord));
if(FAILED(hr))
{
......
}
else
{
pRecord->Open(strSql,(IDispatch*)....
}
}
return S_OK;
}
{
try
{
IDBManPtr myTest;
myTest.CreateInstance(__uuidof(myDll));
_RecordsetPtr Record;
Record.CreateInstance(__uuidof(Recordset));
myTest->Show("select * from Table",(IUnknown**)&Record);
}
catch(_com_error err)
{
AfxMessageBox((char*)err.Description());
}
catch(...)
{
AfxMessageBox("不能原谅的错误");
}
}COM 端
STDMETHODIMP CDBOperator::Test(LPSTR strSql,IUnknown** Record)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) HRESULT hr; _RecordsetPtr pRecord=NULL; pRecord.CreateInstance(__uuidof(Recordset)); hr=(*Record)->QueryInterface(pRecord.GetIID(),(void**)(&pRecord));
//程序走到此处便直接跳到 --> AfxMessageBox("不能原谅的错误"); if(FAILED(hr))
...
}
pRecord.CreateInstance(__uuidof(Recordset));
pRecord返回是否NULL?
hr返回0。
给推荐几个COM朋友吧,太没有成就感了。
我的EMAIL:[email protected]