Ich krame den Thread mal hervor für eine Frage meinerseits: eine ProgID setzt sich ja immer aus dem Bibliotheksnamen + "." + CoClass des zu verwendenen
COM-Objekts zusammen. Um zu überprüfen, ob ein
COM-Server bereits im System bekannt ist, verwende ich Shmias Funktion
Delphi-Quellcode:
function ProgIDExists(const ProgID: WideString): Boolean;
var
tmp: TGUID;
begin
Result := Succeeded(CLSIDFromProgID(PWideChar(ProgID), tmp));
end;
Anhand von
MSXML wollte ich nun mal diese Funktion etwas testen. Ich übergebe als ProgID z.B. "Msxml2.DOMDocument40", weil "DOMDocument40" laut der importierten TLB-Pascal-Datei der Name der CoClass für das Interface IXMLDOMDocument2 ist. Der Aufruf geht jedoch schief, man muss scheinbar statt "Msxml2.DOMDocument40" "Msxml2.DOMDocument.4.0" übergeben. Jetzt frage ich mich natürlich: wieso? Wie kommt diese Diskrepanz zustande? Und woher weiß ich dann überhaupt (ohne Dr. Google befragen zu müssen), welche ProgID ich in Delphi der Funktion ProgIDExists übergeben muss, wenn es schon bei
MSXML nicht hinhaut?