AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Herausfinden, welche Excelversion genutzt werden kann
Thema durchsuchen
Ansicht
Themen-Optionen

Herausfinden, welche Excelversion genutzt werden kann

Ein Thema von xZise · begonnen am 13. Aug 2009 · letzter Beitrag vom 17. Aug 2009
Antwort Antwort
Seite 3 von 3     123   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 15:03
Ersetz mal PWideChar() durch PChar()
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#22

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 15:07
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#23

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 16:55
Zitat von xZise:
aber da gibt es das Problem, das er es nicht kompilieren kann.
Fehlermeldung?

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:
type POleStr = PWideChar;
...
function CLSIDFromProgID(pszProgID: POleStr; out clsid: TCLSID): HResult; stdcall;
Ich vermute das Problem jetzt mal beim Parameter pszProgID.
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;
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#24

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 17:50
Zitat von xZise:
Hallo,

Also es funktioniert nicht so ganz. Also bei mir funktionierts (D2k9), aber TurboDelphi meckert:
Zitat:
[Pascal Fehler] UWerkzeuge.pas(89): E2089 Ungültige Typumwandlung
Und zwar ist das in der ersten If-Bedingung und auch in der zweiten.
Delphi-Quellcode:
function GibExcelVersion : TExcelVersion;
var
  tmp : TGUID;
begin
  // Test auf MSO 2k3 / MSO 2k7
  Result := evKeine;
  if Succeeded(CLSIDFromProgID(PWideChar('Excel.Application.11'), tmp)) then
    Result := ev2003
  else if Succeeded(CLSIDFromProgID(PWideChar('Excel.Application.12'), tmp)) then
    Result := ev2007;
end;
Wenn man das aber "aufteilt" also etwa so:
Delphi-Quellcode:
var
  s : string;
  pw : PWideChar;
  i : Integer;
begin
  s := 'Excel.Application.11';
  pw := PWideChar(s);
  i := CLSIDFromProgID(pw, tmp);
  if Succeeded(i) then
Das liefert keinen Fehler, aber das liefert auch kein Succeeded.
Ich muss dazu sagen, dass die aufgeteilte Version so sein sollte, aber ich kann dafür meine Hand leider nicht ins Feuer legen

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#25

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 15. Aug 2009, 23:01
@xZise: das ist auch nicht der Code, den ich in Betrag #19 gepostet habe!
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#26

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 16. Aug 2009, 02:54
Aber warum sollte dann der Fehler nicht mehr auftreten?

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#27

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 16. Aug 2009, 03:21
Delphi-Quellcode:
function ClassIDExists(const classID:WideString):Boolean;
var
  tmp : TGUID;
begin
  Result := Succeeded(CLSIDFromProgID(PWideString(classID), tmp));
end;
Weil der Übergabeparameter den Datentyp WideString hat.
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.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#28

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 16. Aug 2009, 11:53
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#29

Re: Herausfinden, welche Excelversion genutzt werden kann

  Alt 17. Aug 2009, 14:17
Okay, es lag tatsächlich daran!

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz