Interessant info. Men de ADO-poiuntere der genereres ved det #import-direktiv jeg anvendte i ovenstående eksempel er COM-smartpointere - dvs. COM-pointere.
Så udover den interessante lekture, der ligger i at man i C++ kan dereferere objekter med \".\" men pointere med \"->\", så vil jeg lige rette mit eksempel ovenfor.
Hvis du ikke - ligesom i et MFC-eksempel - husker at kalde
CoInitialize(0);
ved program-start og
CoUninitialize();
ved program-slut (det er for at du skal træde ind i en såkaldt COM-appartment - kig evt. doc. på CoIninitalize/CoInitializeEx; nødvendigt for at kunne anvende nogen som helst form for COM/OLE/ActiveX (synonymer)).
Og lige en ting til. De såkaldte smartpointere jeg nævnte ER wrapper klasser der:
1) Kalder AddRef() i constructor og Release() i destructor
2) Mapper properties (der i virkeligheden også bare er smarte metode-indpakninger) om til lækker VB/C#-like notation.
=> jpk
Jeg behøver ikke nogen lektion i basal C++, men hvis du har noget, der ikke står i Stroustrup, Meyers etc. og for Windows/COM-specifikt Box, Grimes, Sells et. al. hører jeg gerne fra dig.
=> neuro
Du må undskylde forvirringen i ovenstående eksempel. Jeg anvender både typer, der hedder _variant_t og CComVariant der er pendanter i to forskellige verdener. Hvis du ikke selv skal skrive COM-servere så ignorer dette. De smartpointere, der genereres ved blot at skrive #import kaldes DTC-pointere (Direct To COM), og er mere omfattende (programmatisk nemmere) nemmere end ATL-pointere. Fordelen ved DTC-pointere er, at de gør som nævnt ovenfor, men tillige mapper de åndsvage fejl-returkoder om til C++-exceptions, så du kan anvende struktureret exception handling a la:
try {
// Use ADO
}
catch (const _com_error &e) {
// e har både Description, ErrorMessage mm. som
// du vil kunne anvende til at få mere info
// omkr. fejlhåndteringen.
}
Mht. MFC, så vil jeg anbefale dig at gå langt udenom. Der findes tons vis af kode skrevet i MFC, se f.eks.
www.codeguru.com. Problemet er, at kerne-koden i MFC er præ-1992 C++, dvs. man har ikke været så forbandet opmærksom på f.eks. RTTI (RunTime Type Info) og man vælter sig derfor stadigvæk i skægge gamle makroer, hvilket virkeligt er en pain in the ass når man laver GUI-apps, og vil lave masser af forskellige views. Derudover er MFC virkeligt tungt. Hvis du gerne vil lave GUI på sigt, så kan jeg anbefale at gå en ud af to andre veje:
1) WTL. Windows Template Library. Doc kan hentes på
http://www.develop.com/dm/dev_resources.asp, og det installeres med Platform SDK\'et, hvis du altså ønsker det. Fordelen er, at det er \"en anelse mere\" up to date. Alle de kendte klasser fra MFC er genimplementeret. Den eksekverbare kode er hurtigere og LANGT mindre. Koden ligner hindanden så meget, at det er nemt at portere, såfremt man har kodet ordentligt. Og så er der lige et lille issue omkr. trådning. For dem der har prøvet andet end on-idle implementeringer af baggrunds-processer og dermed følgende kommunikation med views vil vide hvad jeg taler om. Se doc\'en
2) Gå .NET vejen og anvend Windows-forms. Den seneste eller næst-seneste udgave af .NET-showet viser hvor nemt det er.