Vielen Dank TiGü für die super Hilfe. Der entscheidende Hinweis war die
"Supports" Funktion der SysUtils. Jetzt versteh ich wie ich die Datenstruktur mit dem Interface verbinde.
Ich habe Deine "Problemzeile" jetzt so gelöst, meine Gedankenschritte sind jeweils im Comment:
Code:
procedure Main;
var
HR: HRESULT;
mbnInfMgr: TMbnInterfaceManager;
ConnectionEnum: IEnumConnectionPoints;
infMgr: IMbnInterfaceManager;
interfaces: PSafeArray;
inf: IMbnInterface;
MbnInterfaceManager: IMbnInterfaceManager;
mbnConnMgr: TMbnConnectionManager;
conMgr: IMbnConnectionManager;
icpc: IConnectionPointContainer;
icp: IConnectionPoint;
connEvtsSink: IUnknown;
cookie, requestID: UINT;
conn: IMbnConnection;
subscriberInfo: IMbnSubscriberInformation;
// einige dummy und Hilsvariablen
x,i : Integer;
sabT : TSafeArraybound;
aPointer : Pointer;
iLow, iHigh : Integer;
aSaElement : IMBNInterface;
tstStr : wideString;
aSaElement : IMBNInterface;
begin
mbnInfMgr := TMbnInterfaceManager.Create(nil);
if Supports(mbnInfMgr.DefaultInterface, IMbnInterfaceManager, infMgr) then
begin
HR := infMgr.GetInterfaces(interfaces);
if HR = S_OK then
begin
// Grenzen des TSafeArray mittels Hilfsvariable abfragen.
sabt:=interfaces.rgsabound[0];
writeln('No of Interface Elements/Bounds: '+intToStr(sabt.cElements)+'/'+intToStr(sabt.lLbound));
SafeArrayLock(interfaces);
try
// ich will dem IMBNInterface nur eines der im Interfacemanager gesammelten Interface zuweisen
// und zwar das erste
x:=0;
// das erste Interface holen und zwischenspeichern in aSaElement
SafeArrayGetElement(interfaces,x,aSaElement);
inf:=IMBNInterface(aSAElement); //... und zuweisen
if inf.GetSubscriberInformation(subscriberInfo) = S_OK then begin;
subscriberInfo.Get_SubscriberID(tstStr) ;
writeln('Interface mounted. Subscriber: '+tstStr);
end;
finally
SafeArrayUnlock(interfaces);
end;
end
else
begin
RaiseLastOSError(HR);
end;
end;
mbnConnMgr := TMbnConnectionManager.Create(nil);
.........
......... der Rest ist wie gehabt
Funktioniert jetzt alles einwandfrei. Ich werde weitermachen und das ganze erweitern. Das MBN
API eröffnet mächtige Möglichkeiten. Danke nochmals.