AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Änderungen von XE3 zu XE4

Ein Thema von sh17 · begonnen am 13. Jul 2013 · letzter Beitrag vom 17. Jul 2013
Antwort Antwort
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.664 Beiträge
 
Delphi 11 Alexandria
 
#1

Änderungen von XE3 zu XE4

  Alt 13. Jul 2013, 13:31
Delphi-Version: 5
Ich habe gerade die DragAndDrop Komponenten für XE4 überarbeitet. Dabei habe ich ein paar Probleme:

Methoden-Variablen können nicht mehr auf nil geprüft werden, ist das richtig?

Delphi-Quellcode:
var
  _CopyStgMedium: function(const cstgmedSrc: TStgMedium; var stgmedDest: TStgMedium): HResult; stdcall = nil;

  if (@_CopyStgMedium = nil) then

  ist jetzt

  if not Assigned(@_CopyStgMedium) then

DWORD muss durch CppULongInt ersetzt werden, wenn man einen Pointer darauf haben möchte?

Delphi-Quellcode:
var
  SubKey: HKey;
  NumSubKeys, NumValues: DWORD; ---> CppULongInt
  p: PChar;
begin
  p := nil;
  repeat
    Result := False;
    if (RegOpenKey(HKEY_CLASSES_ROOT, PChar(Key), SubKey) = ERROR_SUCCESS) then
      try
        Result := (RegQueryInfoKey(SubKey, nil, nil, nil, @NumSubKeys, nil, nil,
          @NumValues, nil, nil, nil, nil) = ERROR_SUCCESS);


GetProc spinnt

Delphi-Quellcode:
    GetProc('MAPIGetDefaultMalloc@0', @MAPIGetDefaultMalloc);

ersetzt durch

    @MAPIGetDefaultMalloc := GetProcAddress(MAPI32, 'MAPIGetDefaultMalloc@0');

hier komme ich nicht weiter
kommt
[dcc32 Fehler] DragDropInternet.pas(1554): E2010 Inkompatible Typen: 'Pointer' und 'TMAPIAllocateBuffer'

Delphi-Quellcode:
type
  TMAPIAllocateBuffer = function(cbSize: ULONG; var lppBuffer: pointer): SCODE; stdcall;

var
  MAPIAllocateBuffer: TMAPIAllocateBuffer = nil;
  ...

    OleCheck(OpenIMsgOnIStg(FSession,
      @MAPIAllocateBuffer,
      @MAPIAllocateMore,
      @MAPIFreeBuffer,
      IMalloc(MapiGetDefaultMalloc),
      nil,
      FStorages[Index],
      nil, 0, 0,
      Result));
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Änderungen von XE3 zu XE4

  Alt 13. Jul 2013, 13:36
DWORD muss durch CppULongInt ersetzt werden, wenn man einen Pointer darauf haben möchte?
Ein Pointer braucht 4 bzw. 8 Byte je nach Compilierung für Win32 oder Win64.
Ein DWORD ist immer 4 Byte lang. Also braucht man einen entsprechend großen Typ. Als generischer Typ wurde hier NativeInt eingeführt.
Aber wieso nicht gleich Pointer verwenden wenn es ein Pointer ist?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.664 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Änderungen von XE3 zu XE4

  Alt 13. Jul 2013, 13:44
ich habe mir die Quelle von PDWORD angeschaut
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.664 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Änderungen von XE3 zu XE4

  Alt 13. Jul 2013, 13:47
RegQueryInfoKey hätte gern ein PDWORD auf NumSubKeys, was vorher ein DWORD war. geht nicht mehr, hab ich CppULongInt genommen, NativeInt geht nicht
Sven Harazim
--
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Änderungen von XE3 zu XE4

  Alt 13. Jul 2013, 15:13
Das ist leider wirklich eine Änderung, die viele Quelltexte anpassungsbedürftig machen dürfte... Eine Antwort wie jemand auf die Idee kommen kann einen Pointer auf einen DWORD (was ja schon der Name PDWORD impliziert) plötzlich auf einen anderen Typ zeigen zu lassen, habe ich leider auch nicht...
http://qc.embarcadero.com/wc/qcmain.....aspx?d=115307
http://qc.embarcadero.com/wc/qcmain.....aspx?d=115426
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Thomas_K

Registriert seit: 16. Apr 2006
71 Beiträge
 
Delphi XE8 Professional
 
#6

AW: Änderungen von XE3 zu XE4

  Alt 17. Jul 2013, 11:18
Ich habe gerade die DragAndDrop Komponenten für XE4 überarbeitet. Dabei habe ich ein paar Probleme:

hier komme ich nicht weiter
kommt
[dcc32 Fehler] DragDropInternet.pas(1554): E2010 Inkompatible Typen: 'Pointer' und 'TMAPIAllocateBuffer'

Delphi-Quellcode:
type
  TMAPIAllocateBuffer = function(cbSize: ULONG; var lppBuffer: pointer): SCODE; stdcall;

var
  MAPIAllocateBuffer: TMAPIAllocateBuffer = nil;
  ...

    OleCheck(OpenIMsgOnIStg(FSession,
      @MAPIAllocateBuffer,
      @MAPIAllocateMore,
      @MAPIFreeBuffer,
      IMalloc(MapiGetDefaultMalloc),
      nil,
      FStorages[Index],
      nil, 0, 0,
      Result));
ich hab das rein "Intuitiv" so abgeändert

Delphi-Quellcode:

    OleCheck(OpenIMsgOnIStg(FSession,
  {$IF CompilerVersion >= 25.0}
      pointer(@MAPIAllocateBuffer),
      pointer(@MAPIAllocateMore),
      pointer(@MAPIFreeBuffer),
  {$ELSE}
      @MAPIAllocateBuffer,
      @MAPIAllocateMore,
      @MAPIFreeBuffer,
  {$ENDIF}
      IMalloc(MapiGetDefaultMalloc),
      nil,
      FStorages[Index],
      nil, 0, 0,
      Result));
Ist das so OK?
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:38 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