Re: Convert int to enum
From: Craig Kelly (cnkelly.nospam_at_nospam.net)
Date: 12/15/04
- Next message: Bonj: "Re: Convert int to enum"
- Previous message: Boris: "RegEdit alternative"
- In reply to: Bonj: "Re: Convert int to enum"
- Next in thread: Bonj: "Re: Convert int to enum"
- Reply: Bonj: "Re: Convert int to enum"
- Messages sorted by: [ date ] [ thread ]
Date: Wed, 15 Dec 2004 23:59:46 GMT
"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: Bonj: "Re: Convert int to enum"
- Previous message: Boris: "RegEdit alternative"
- In reply to: Bonj: "Re: Convert int to enum"
- Next in thread: Bonj: "Re: Convert int to enum"
- Reply: Bonj: "Re: Convert int to enum"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|