Re: Convert int to enum
From: Bonj (benjtaylor)
Date: 12/16/04
- Next message: Angela: "Batch file question"
- Previous message: Craig Kelly: "Re: Convert int to enum"
- In reply to: Craig Kelly: "Re: Convert int to enum"
- Next in thread: Craig Kelly: "Re: Convert int to enum"
- Reply: Craig Kelly: "Re: Convert int to enum"
- Messages sorted by: [ date ] [ thread ]
Date: Thu, 16 Dec 2004 12:39:35 -0000
That'd be great, I wouldn't have a problem if I could use the COM support
classes - which aren't included as part of the SDK.
"Craig Kelly" <cnkelly.nospam@nospam.net> wrote in message
news:Sd4wd.1100946$Gx4.115941@bgtnsc04-news.ops.worldnet.att.net...
> "Bonj" wrote:
>
>> I've tried that, but it's msado15.h, not msado15_h.h, and it isn't the
>> same. I get a load of errors that I've got better things to do than fix,
>> I'd rather have a .vbs that modifies the midl output to be correct as it
>> doesn't seem like there's any other viable solution.
>
> As I mentioned in another post, I prefer the #import directive, but some
> playing around got the following to work. I used some of the COM support
> classes because I *hate* dealing directly with BSTR and VARIANT. I didn't
> really do all that much testing, but the following (with an appropriate
> connection string and query string) retrieved and printed the first column
> of the first row in the recordset...
>
> /*
> test.cpp, compiles with MSVC.NET...
> cl /GX test.cpp /link ole32.lib comsupp.lib
> */
>
> #include <windows.h>
> #include <initguid.h>
> #include "adoid.h"
> #include "msado15.h"
> #include <comdef.h>
> #include <comutil.h>
> #include <string>
> #include <iostream>
>
> using namespace std;
>
> struct COM_Init {
> COM_Init() { CoInitialize(NULL); }
> ~COM_Init() { CoUninitialize(); }
> } COM_Init_;
>
> static void check_hr(HRESULT hr) {
> if (FAILED(hr)) throw hr;
> }
>
> template <class T> static void safe_rel(T& t) {
> if (!t) return;
> t->Release();
> t = NULL;
> }
>
> void safe_rel_rs(ADORecordset*& rs) {
> if (!rs) return;
>
> long s = 0;
>
> if (SUCCEEDED(rs->get_State(&s)))
> if (adStateOpen == s)
> rs->Close();
>
> safe_rel(rs);
> }
>
> static string bstr2stl(const _bstr_t& b) {
> const char* c = b.operator const char *();
> return c ? c : "";
> }
>
> int main(void)
> {
> ADORecordset* rs = NULL;
> ADOFields* flds = NULL;
> ADOField* f = NULL;
>
> try {
> HRESULT hr = S_OK;
>
> hr = CoCreateInstance(CLSID_CADORecordset, NULL,
> CLSCTX_INPROC_SERVER, IID_IADORecordset, (void**)&rs);
> check_hr(hr);
>
> _variant_t connect = _bstr_t("Your_Connection_String");
> _variant_t source = _bstr_t("Your_SQL_SELECT");
> hr = rs->Open(source, connect, adOpenForwardOnly,
> adLockReadOnly, -1);
> check_hr(hr);
>
> check_hr(rs->get_Fields(&flds));
>
> _variant_t val;
> check_hr(flds->get_Item(_variant_t(0L), &f));
> check_hr(f->get_Value(&val));
> cout << bstr2stl((_bstr_t)val) << endl;
> }
> catch(HRESULT hr) { cerr << "COM Failure: " << hr << endl; }
> catch(...) { cerr << "exception" << endl; }
>
> safe_rel(f);
> safe_rel(flds);
> safe_rel_rs(rs);
>
> return 0;
> }
>
>
- Next message: Angela: "Batch file question"
- Previous message: Craig Kelly: "Re: Convert int to enum"
- In reply to: Craig Kelly: "Re: Convert int to enum"
- Next in thread: Craig Kelly: "Re: Convert int to enum"
- Reply: Craig Kelly: "Re: Convert int to enum"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|