Я сейчас работаю над принятием кода Visual Basic в код Delphi.
Что у меня есть:
// prepare query
with oleClipboardFormat do
begin
cfFormat := CF_FileContents;
ptd := nil;
dwAspect := DVASPECT_CONTENT;
lindex := Index;
tymed := TYMED_ISTREAM or TYMED_ISTORAGE;
end;
// query data
data.GetData(oleClipboardFormat, oleMedium)
Поле oleMedium.hGlobal
(тип переменной Cardinal
) содержит ссылку на интерфейс IStorage
.
Как я должен разыграть oleMedium.hGlobal
на IStorage
?
В источниках VB, которые я сейчас перевожу, есть какая-то черная магия. Автор кода использует следующую визуальную базовую функцию для приведения указателей на интерфейсы ...
Private Function ResolvePointer(ByVal PtrObj As Long) As stdole.IUnknown
Dim oUnk As stdole.IUnknown
' Get an uncounted reference
' to the IUnknown interface
MoveMemory oUnk, PtrObj, 4&
' Get a counted reference
Set ResolvePointer = oUnk
' Release the uncounted reference
MoveMemory oUnk, 0&, 4&
End Function