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?
.