关于aumation的一点疑惑
borz 2002-04-07 09:48:43 MSDN上说,如果你要享受automation带来的乐趣的话,你必须使用autionmation所能兼容的参数类型。现在应用要我实现类似这样的东东
ICardInfo
{
get_CardName()..
set_CardNmae()
....
....
} //里面全是一些属性操作
而"我希望"有一个
ICardInfosManager
{
CreateCardInfo(ICardInfo **ci);
...
...
}
很显然我如果放弃automation的想法,绝对可行,但如果我一定要用automation那
似乎只有自己将CardInfo定义成UDT,通过SAFEARRAY或者VARIANT来传递,然后通过IRecordInfo来访问,
由此我有个疑问,ADO里面的对象是如何实现的(顺便问一下:它应该是个应用到Automaion的一个例子吧),比如
con.Provider = "MSDAOSP"
con.Properties("Data Source") = "SampleOSP_VB.MyDataSource"
con.Open
rs.Open " C:\Oledbsdk\Osptk\Samples\Customer.txt", con
很显然,RecordSet在调用Open时传递了一个Connection对象con进去了,
而Connection又不是Automation所兼容的类型,小弟初识COM/ATL,不解其中
含义,请哪个讲讲
另外小弟还有一个问题
我在项目的idl里加了一段
typedef [uuid(6A8EBB1A-57ED-48f4-BE7B-AE74C5206D5A)] struct tag_CardInfo{
short id;
} CardInfo;
然后在下面的interface的method定义中
interface ICardInfosManager : IDispatch
{
[id(1), helpstring("method CreateCardInfo")] HRESULT CreateCardInfo([out]SAFEARRAY(CardInfo) *psa);
};
在编译时出现了下面的问题
E:\Works\BT\V1\client\test\2\2.idl(60) : warning MIDL2039 : interface does not conform to [oleautomation] attribute : [ Parameter 'psa' of Procedure 'CreateCardInfo' ( Interface 'ICardInfosManager' ) ]
midl\oleaut32.dll : warning MIDL2368 : error generating type library, ignored : Could not set UUID : tag_CardInfo
这又是为何?
烦劳高手指点迷津