Je travaille actuellement sur l'adoption du code Visual Basic dans le code Delphi.Convertir Cardinal en IUnknow
Ce que j'ai:
// 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)
Le champ oleMedium.hGlobal
(type de variable est Cardinal
) contient une référence à l'interface IStorage
. Comment puis-je diffuser oleMedium.hGlobal
à IStorage
?
Il y a une sorte de magie noire dans les sources VB que je traduis en ce moment. L'auteur du code utilise la fonction Visual Basic suivante pour lancer des pointeurs vers des interfaces ...
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
La prochaine fois, n'oubliez pas d'inclure les ** déclarations de variables ** avec votre code. J'ai dû faire un peu de recherche avant de comprendre ce que 'GetData' était et quels étaient ses types d'arguments. –