Die Frage ist offener als ein Scheunentor groß sein kann.
Ich darf mal das Szenario nachstellen :
Microsoft macht in etwa das:
Code:
CSidData::InternalLookUpSids(..., ISecurityInformation2 pS2, ...);
{
..
..
LPDataObject lpDO = NULL;
...
HRESULT hr = pS2->LookUpSids(..., lpDO); //mein Aufruf OK
if (hr <> S_OK)
FAIL
hr = lpDO->GetData(....); //
exception hier ( call dword ptr [ecx+$0c] )
if (hr <> S_OK)
FAIL
...
}
Es sieht so aus, als ob die Speicherstelle bei [ecx+$0c] garnicht mein GetData ist.
Der Vergleich von @GetData mit der Stelle ergibt über $300-$1000 Bytes Unterschied.
Ich bin echt ratlos, besonders da eine reine C++ Implementierung einwandfrei funktioniert.
Auch eine komplette neue Implementation des SecurityDialogs unter Delphi mit
sowenig Code wie möglich, läuft auf dasselbe hinaus.
Es scheint als hätte Borland einen totalen Sc*****d**** gemacht - oder es liegt an was anderes.
Auf jeden Fall bin ich verzweifelt - soetwas hab ich noch nie erlebt.
---
EDIT: Fehler im Code korrigiert.