某些API的-MkParseDisplayNameEx,ADsGetObject-对于“windows server 2008 64bit”上的LDAP不起作用

我有这个代码是运行在所有的Windows平台(XP 32位,XP 64位,服务器2003 32位,服务器2008 32位,Windows 7 32位),我只是不能运行在“Windows Server 2008 R2 64位”的API导致无法处理的exception:

“应用程序定义的exception(代码0x0eedfade)在0x7773c42d”

这是我使用的代码:

function GetObject(APath: String): IDispatch; var Moniker: IMoniker; Eaten: integer; BindContext: IBindCtx; Dispatch: IDispatch; begin Result := nil; OleCheck(CreateBindCtx(0, BindContext)); OleCheck(MkParseDisplayNameEx(BindContext, PWideChar(WideString(APath)), Eaten, Moniker)); OleCheck(Moniker.BindToObject(BindContext, nil, IUnknown, Dispatch)); Result := Dispatch; end; 

该行出现exception:

  OleCheck(MkParseDisplayNameEx(BindContext, PWideChar(WideString(APath)), Eaten, Moniker)); 

我也试过这个代码,但也出现一个无处理的exception:

 function GetObject(APath: String): IDispatch; begin ADsGetObject(APath, IDispatch, Result); end; 

我在所有平台传递相同的APath参数:“LDAP:// MYDOMAIN / CN = MY_DOMAIN_GROUP,CN = Users,DC = MYDOMAIN,DC = COM”

这与LDAP协议和ADSIEdit.dll库有关,我检查了是否RSAT -Reamote服务器pipe理工​​具 – 应该安装这个库,它看起来这个Windows组件已经安装…任何想法的原因这个例外?