Re: Trouble with IADs
* Jimi:
Hey all,
I keep getting the following error
d:\programming\dynascript\dynascriptdlg.cpp(325) : error C2065:
'IADs' : undeclared identifier
A copy of my code is listed at the end of the post.
I am using VC++ (Visual Studio 2005) with Microsoft Platform SDK for
Win2k3 R2 installed, on a WinXP SP2 system.
.
I have added the the SDK Paths to project options as described in the
MSDN.
I have even tried on 2 different PC's incase something went wrong with
the SDK install the first time.
I have loked every where and cannot figure out what I'm doing
wrong... Any Assistance will be greatly appreciated.
// Code from my Program
#include <windows.h>
#include <activeds.h>
#include <Iads.h>
#include "stdafx.h"
#include "DynaScript.h"
#include "DynaScriptDlg.h"
#include "CrtCntrDlg.h"
#include "AddSys.h"
.
.
.
int CDynaScriptDlg::ImportOU() {
HRESULT hr = CoInitialize( NULL );
if (SUCCEEDED (hr) ) {
IADs *piConnection = NULL;
hr = ADsGetObject(L"LDAP://dummy.nonexist.local", IID_IADS,
(void**) & piConnection});
if (SUCCEEDEED (hr)) {
MessageBox("Successfully Conected to labs!");
piConnection->Release();
}
// More ADSI Code will go here
(void) CoUninitialize();
}
return (int)hr;
}
Well, I don't know about "IADs" since that identifier doesn't appear in your
code. Possibly it occurs as a result of macro substitution (browse the
headers). Or possibly you haven't shown the offending code.
However, the code you have shown can benefit greatly from a little clean-up.
First, although CoInitialize/CoUninitialize were designed for being used in the
way you're using them here, locally (which could be a nested pair of calls),
Microsoft's own coding practices means that this is extremely unsafe, it can
leave your program hanging or e.g. send a threatening letter to Putin. The only
reason to use local call of CoInitialize should be to check that it isn't a
nested call. If the HRESULT indicates a nested call, abort: it's an error.
Second, the code is based on some framework, but fails to use a COM smart
pointer. Use a COM smart pointer. Don't code Release() calls manually: that
way lies disaster (e.g. it's not exception safe).
Don't cast a HRESULT to int.
Don't cast away the result of CoUnitialize.
Don't use C-style casts.
Fix the speling eror.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?