![]() |
Delphi-Version: 5
Änderungen von XE3 zu XE4
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)); |
AW: Änderungen von XE3 zu XE4
Zitat:
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? |
AW: Änderungen von XE3 zu XE4
ich habe mir die Quelle von PDWORD angeschaut :(
|
AW: Änderungen von XE3 zu XE4
RegQueryInfoKey hätte gern ein PDWORD auf NumSubKeys, was vorher ein DWORD war. geht nicht mehr, hab ich CppULongInt genommen, NativeInt geht nicht
|
AW: Änderungen von XE3 zu XE4
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...
![]() ![]() |
AW: Änderungen von XE3 zu XE4
Zitat:
Delphi-Quellcode:
Ist das so OK?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)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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