![]() |
Re: Herausfinden, welche Excelversion genutzt werden kann
Ersetz mal PWideChar() durch PChar()
|
Re: Herausfinden, welche Excelversion genutzt werden kann
Hmm, aber unter Turbo Delphi will er auch ein PWideChar als Übergabeparameter. Also im Moment kann ich das leider nicht testen, weil hier nicht Turbo Delphi installiert ist.
Aber ich werde nachher wahrscheinlich mal zu Vista rüberbooten, da habe ich dann Turbo Delphi. MfG xZise |
Re: Herausfinden, welche Excelversion genutzt werden kann
Zitat:
Aber es sollte klar sein, dass man auf jeden Fall eine Funktion wie ClassIDExists() benötigt. Man kann ja nicht für jede Abfrage den Code erneut hinschreiben wie das in Beitrag #11 anklingt. Die Deklaration von CLSIDFromProgID() aus Unit ActiveX sieht unter Delphi 2007 so aus:
Delphi-Quellcode:
Ich vermute das Problem jetzt mal beim Parameter pszProgID.
type POleStr = PWideChar;
... function CLSIDFromProgID(pszProgID: POleStr; out clsid: TCLSID): HResult; stdcall; Hier eine Änderung (compiliert unter D2007 ebenfalls)
Delphi-Quellcode:
function ClassIDExists(classID:WideString):Boolean;
var tmp : TGUID; begin Result := Succeeded(CLSIDFromProgID(POleStr(classID), tmp)); end; |
Re: Herausfinden, welche Excelversion genutzt werden kann
Zitat:
|
Re: Herausfinden, welche Excelversion genutzt werden kann
@xZise: das ist auch nicht der Code, den ich in Betrag #19 gepostet habe!
|
Re: Herausfinden, welche Excelversion genutzt werden kann
Aber warum sollte dann der Fehler nicht mehr auftreten?
MfG xZise |
Re: Herausfinden, welche Excelversion genutzt werden kann
Delphi-Quellcode:
Weil der Übergabeparameter den Datentyp WideString hat.
function ClassIDExists(const classID:WideString):Boolean;
var tmp : TGUID; begin Result := Succeeded(CLSIDFromProgID(PWideString(classID), tmp)); end; WideString und PWideString sind kompatibel; der Compiler weiss wie er die Typumwandlung vornehmen muss. String, genauer gesagt AnsiString und PWideString sind nicht kompatibel. Untehalb D2009 gilt: String=AnsiString Ab D2009 gilt: String=WideString (das ist der Grund weshalb PWideString('irgendein Text') erlaubt ist) Bei den älteren Delphi Versionen nimmt der Compiler die Konvertierung zwischen String und WideString beim Aufruf einer Funktion oder Procedure automatisch vor. Nimm einfach obige Funktion und es funktioniert für alle Delphi Versionen. |
Re: Herausfinden, welche Excelversion genutzt werden kann
Ah stimmt. Das heißt ein Cast nach WideString hätte aber auch funktioniert... Ich hatte eigentlich gedacht so eine unbedenkliche Umwandlung, besonders weil das ja Quasi eine Konstante ist, wird automatisch durchgeführt.
Okay ich frage mal meinen Kumpel ob es jetzt funktioniert. MfG xZise |
Re: Herausfinden, welche Excelversion genutzt werden kann
Okay, es lag tatsächlich daran!
MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz