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));