我在EXE程序里是这么做的
_ConnectionPtr m_spConnection;
m_spConnection.CreateInstance(__uuidof(Connection));
m_spConnection->Open(_bstr_t(szValue), "", "", NULL);//以上都没问题,szValue是连接参数m_spAdo->SetConnPtr((unsigned short *)m_spConnection);//m_spAdo是组件,我想把数据库连接指针传进COM//下面是组件里的SetConnPtr方法实现
//STDMETHODIMP CHCAdoService::SetConnPtr(TCHAR* pConnection)
//{
// TODO: 在此添加实现代码// m_spConnection = (_ConnectionPtr)(pConnection);//m_spConnection 是组件里的_ConnectionPtr变量
// return S_OK;
//}有没有什么方法把数据库连接指针传进来
_ConnectionPtr m_spConnection;
m_spConnection.CreateInstance(__uuidof(Connection));
m_spConnection->Open(_bstr_t(szValue), "", "", NULL);//以上都没问题,szValue是连接参数m_spAdo->SetConnPtr((unsigned short *)m_spConnection);//m_spAdo是组件,我想把数据库连接指针传进COM//下面是组件里的SetConnPtr方法实现
//STDMETHODIMP CHCAdoService::SetConnPtr(TCHAR* pConnection)
//{
// TODO: 在此添加实现代码// m_spConnection = (_ConnectionPtr)(pConnection);//m_spConnection 是组件里的_ConnectionPtr变量
// return S_OK;
//}有没有什么方法把数据库连接指针传进来
解决方案 »
- 一个星期不吃肉
- MFC 单选按纽怎么知道点哪一个
- MFC在Timer中使用CreatePen返回0怎么办啊?T_T
- ado 存储过程 CreateParameter 拒绝访问
- http://www.vckbase.com/document/viewdoc.asp?id=551
- 2k下用那些api函数能够对一个分区格式化
- 请问如何用HTML和ISAPI向服务器传送文件!!谢谢各位大虾!!
- 为什么我有个结了的帖子左边的勾是红色的?
- 请大家看看我的问题,会者不难啊
- 寻找工具软件:我以前有一个软件能察内存泄漏(安装后和vc6.0集成在一起),有人能告诉我名字和URL
- m_bcenter这个bool型的变量,MFC中定义它的作用是什么
- <WINDOWS程序设计>第9章第1个程序的几个问题
也不行 ,传进来以后就变成1,0之类的了
{
m_spConnection = pConnection;
}
m_spAdo->SetConnPtr(m_spConnection);//m_spAdo是组件,我想把数据库连接指针传进COM
据说能注册下_ConnectionPtr这个类型,COM就能认识了
不知道怎么注册
不是_Connection类型的指针吗?
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\
rename("EOF","adoEOF") rename("BOF","adoBOF")
(这个跟EXE一样,我就是想把EXE中初始化的链接参数传进来,因为是从连接池中取的)
EXE里有个连接池,每次有执行数据库操作的时候,从中取一个已连接的数据库连接指针然后把这个指针传进m_SPAdo这个组件,由这个组件进行数据库操作
如果添加了下面错误就不会发生
编译的时候会报错,提示不认识_ConnectionPtr 。
btw。 在使用_ConnectionPtr地方必须#include "stdafx.h"
CPP里都有加,关键是IDL文件里报错,说不认识这个类型
以前是在m_spAdO里做连接的,能用
http://topic.csdn.net/t/20030810/15/2129906.html
IDL中使用
importlib("C:\Program Files\Common Files\System\ADO\msado15.dll");
import "ocidl.idl";
[
uuid(D58CA366-E404-4F1A-92E4-D818D3B191CA),
version(1.0),
helpstring("MyInterfaceLib 1.0 Type Library")
]
library MYINTERFACELib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
importlib("C:\Program Files\Common Files\System\ADO\msado15.dll"); //在这里添加支持ADO接口的类库
[
object,
uuid(A0EF8702-BFA1-4081-A209-323BDA9B598B),
dual,
helpstring("IMyInterface Interface"),
pointer_default(unique)
]
interface IMyInterface : IDispatch
{
[id(1), helpstring("method getrs")] HRESULT getrs([in] BSTR strQuery, [out,retval] _Recordset **ppRs);
};
[
uuid(F6A5DFD8-A4D0-4B51-9A2D-88DA156CEF2B),
helpstring("MyInterface Class")
]
coclass MyInterface
{
[default] interface IMyInterface;
};
};
1>.\HCAdo.idl(21) : error MIDL2026 : cannot recover from earlier syntax errors; aborting compilation 添加这个importlib ("C:\\Program Files\\Common Files\\System\\ado\\msado15.dll");
出错上面的错误诶
单斜线不是双斜线
import "ocidl.idl";[
object,
uuid(B41D7A6C-F435-48E4-87E5-E60CF3720FDA),
dual,
nonextensible,
helpstring("IHCAdoService 接口"),
pointer_default(unique)
]
interface IHCAdoService : IDispatch{
[id(1), helpstring("方法execQuery")] HRESULT execQuery([in] TCHAR* sql, [out] LPDISPATCH** ppRecordset);
[id(2), helpstring("方法execDML")] HRESULT execDML([in] TCHAR* sql);
[id(3), helpstring("方法SetConnPtr")] HRESULT SetConnPtr([in]_ConnectionPtr pConnection);
};
[
uuid(DD82DE12-5050-48AD-BEBD-941FA958955D),
version(1.0),
helpstring("HCAdo 1.0 类型库")
]
library HCAdoLib
{
importlib("stdole2.tlb");
importlib ("C:\Program Files\Common Files\System\ado\msado15.dll")
[
uuid(E6849756-06CB-4E00-B889-4F7CBE08C199),
helpstring("HCAdoService Class")
]
coclass HCAdoService
{
[default] interface IHCAdoService;
};
};还是那两行错误
1>.\HCAdo.idl(21) : error MIDL2025 : syntax error : expecting a type specification near "_ConnectionPtr"
1>.\HCAdo.idl(21) : error MIDL2026 : cannot recover from earlier syntax errors; aborting compilation
STDMETHODIMP CHCAdoService::SetConnPtr(LPDISPATCH lpDispatch)
{
m_spConnection = lpDispatch;
}
uuid(DD82DE12-5050-48AD-BEBD-941FA958955D),
version(1.0),
helpstring("HCAdo 1.0 类型库")
]
library HCAdoLib //这里要提前
{
importlib("stdole2.tlb");
importlib ("C:\Program Files\Common Files\System\ado\msado15.dll")
}; interface IHCAdoService : IDispatch{
[id(1), helpstring("方法execQuery")] HRESULT execQuery([in] TCHAR* sql, [out] LPDISPATCH** ppRecordset);
[id(2), helpstring("方法execDML")] HRESULT execDML([in] TCHAR* sql);
[id(3), helpstring("方法SetConnPtr")] HRESULT SetConnPtr([in]_ConnectionPtr pConnection);
}; 累死我了
interface IHCAdoService前面
import "ocidl.idl";[
object,
uuid(B41D7A6C-F435-48E4-87E5-E60CF3720FDA),
dual,
nonextensible,
helpstring("IHCAdoService 接口"),
pointer_default(unique)
]
library HCAdoLib
{ importlib ("stdole2.tlb");
importlib ("C:\Program Files\Common Files\System\ado\msado15.dll");
[
uuid(E6849756-06CB-4E00-B889-4F7CBE08C199),
helpstring("HCAdoService Class")
]
coclass HCAdoService
{
[default] interface IHCAdoService;
};
};
interface IHCAdoService : IDispatch{
[id(1), helpstring("方法execQuery")] HRESULT execQuery([in] TCHAR* sql, [out] LPDISPATCH** ppRecordset);
[id(2), helpstring("方法execDML")] HRESULT execDML([in] TCHAR* sql);
[id(3), helpstring("方法SetConnPtr")] HRESULT SetConnPtr([in]_ConnectionPtr pConnection);
};
[
uuid(DD82DE12-5050-48AD-BEBD-941FA958955D),
version(1.0),
helpstring("HCAdo 1.0 类型库")
]我的
可能是这么考虑的:每次数据库操作都是通过一个ADO组件来执行,只要传参数,就返回记录集(有点把数据库的东西封装起来的意思)如果每次都做连接数据库操作影响效率,如果只用一个连接怕这个连接意外断掉,所以每次操作都由连接池给个活的连接。不知道是不是有点四不像。。请指教
时间:2009-07-25 22:36:09 来源: 作者:
请问能否在ATL中将ASP中的数据库连接对象如:
Dim Conn
Set Conn = Server.CreateObject(;ADODB.Connection;)
conn.Open ;Driver={Microsoft ODBC for Oracle};; & _
;Server=server1;; & _
;Uid=dd;; & _
;Pwd=12345;;
这个conn对象通过COM的参数传到COM的方法中,在COM中可以直接用这个CONN 对象?
如果可行那请问方法的参数怎么写?是不是和_ConnectionPtr的对象一样用法?问题点数:0、回复次数:3|||1 在 你的 .idl文件中 加入 importlib(;C:\Program Files\Common Files\System\ADO\MSADO15.DLL;);
2 在 stdafx.h 中加入 #import ;C:\Program Files\Common Files\System\ADO\msado15.dll; no_namespace rename(;EOF;, ;EndOfFile;)
3 给你的ATL对象增加一个属性
名称: Connect
类型: _Connection
注意选择 propPputref
|||接上文:
注意选择 PropPutRef
4 给你的ATL类加一个私有成员: _ConnectionPtr m_ConnectionPtr;
相关的代码如下:
STDMETHODIMP YourOBJ::putref_ActiveConnection(_Connection *newVal)
{
if( m_ConnectionPtr!=0) m_ConnectionPtr=0;
m_ConnectionPtr = _ConnectionPtr( newVal);
return S_OK;
}
STDMETHODIMP YourOBJ::get_ActiveConnection(_Connection **pVal)
{
if( m_ConnectionPtr==0) return E_POINTER;
return m_ConnectionPtr->QueryInterface(__uuidof(_Connection),(void**)(pVal));
}
|||接上文:
勘误:
3 给你的ATL对象增加一个属性
名称: ActiveConnection
类型: _Connection*
注意选择 PropPutRef