hungtn
September 17th, 1999, 10:26 PM
Hi,
I am learning c++/ado(Migrating from VB to VC++). However, I am encountering a strange error that I can't figure out. I wrote a little ado function and call it in a test app. Everything works. I then migrate the funtion to a dll and execute it. However, the dll will just hang/die at the open method. The ado codes are identical in both cases. There is no error in the dll itself since everything else execute without an error. The dll hang exactly at the Open command. I try to catch the error by using try/catch to get a error number and description. However, no such luck since the dll never return anything. I know it dies at the open command since i got the "opening db" message but not the message "open command done" afterward the open command. Below is the code I use to test the function. I will appreciate any help or hint regarding this.
#import "c:\program files\common files\system\ado\msado15.dll" rename "EOF", "adoEOF" )
struct InitOle {
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;
void test()
{
HRESULT hr;
_ConnectionPtr PCon;
_RecordsetPtr Rst;
try{
hr = PCon.CreateInstance(__uuidof(Connection));
if (SUCCEEDED(hr)){
MessageBox(NULL, "openning db", "", MB_OK);
hr = PCon->Open(_bstr_t("DSN=test;UID=test;PWD=;"), _bstr_t(""), _bstr_t(""), adModeUnknown);
MessageBox(NULL, "open command done", "", MB_OK);
if (SUCCEEDED(hr)){MessageBox(NULL, "open okay", "", MB_OK);}}
catch (_com_error& e){
MessageBox(NULL, e.ErrorMessage(), "", MB_OK);
MessageBox(NULL, e.Description(), "", MB_OK);}
}
Regads,
Hung
I am learning c++/ado(Migrating from VB to VC++). However, I am encountering a strange error that I can't figure out. I wrote a little ado function and call it in a test app. Everything works. I then migrate the funtion to a dll and execute it. However, the dll will just hang/die at the open method. The ado codes are identical in both cases. There is no error in the dll itself since everything else execute without an error. The dll hang exactly at the Open command. I try to catch the error by using try/catch to get a error number and description. However, no such luck since the dll never return anything. I know it dies at the open command since i got the "opening db" message but not the message "open command done" afterward the open command. Below is the code I use to test the function. I will appreciate any help or hint regarding this.
#import "c:\program files\common files\system\ado\msado15.dll" rename "EOF", "adoEOF" )
struct InitOle {
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;
void test()
{
HRESULT hr;
_ConnectionPtr PCon;
_RecordsetPtr Rst;
try{
hr = PCon.CreateInstance(__uuidof(Connection));
if (SUCCEEDED(hr)){
MessageBox(NULL, "openning db", "", MB_OK);
hr = PCon->Open(_bstr_t("DSN=test;UID=test;PWD=;"), _bstr_t(""), _bstr_t(""), adModeUnknown);
MessageBox(NULL, "open command done", "", MB_OK);
if (SUCCEEDED(hr)){MessageBox(NULL, "open okay", "", MB_OK);}}
catch (_com_error& e){
MessageBox(NULL, e.ErrorMessage(), "", MB_OK);
MessageBox(NULL, e.Description(), "", MB_OK);}
}
Regads,
Hung