Existe-t-il un moyen de passer un wrapping et de déballer un descendant TObject dans un OleVariant? J'essaye de passer un TObject à travers des objets d'automation. Je sais que ce n'est pas une bonne idée mais je n'ai pas une bonne alternative.Diffuser un objet comme OleVariant dans Delphi
L'objet doit être transmis entre les objets de la même DLL d'automatisation, si cela fait une différence.
Quelque chose comme ceci:
function GetMyObjAsVariant;
var
MyObj: TMyObj;
begin
MyObj := TMyObj.Create;
result := OleVariant(MyObj);
end;
qui serait utilisé par un client comme
var
MyObj: TMyObj;
begin
MyObj := GetMyObjAsVariant as TMyObj;
end;
Cela ne peut pas compiler, retour
E2015 Operator not applicable to this operand type.
Comme dit: ceci ne fonctionne que dans le même processus. Donc seulement dans les objets COM de processus (dll)! –
C'est le hack que je cherchais! Les autres réponses étaient bonnes aussi, mais cela répond à mon besoin immédiat, merci. –
S'il s'agit d'une DLL COM in-process, pourquoi vous obligez-vous à OLEVariant en premier lieu? Il suffit de coller aux types compatibles avec l'automatisation si vous fournissez une interface de répartition (pour les clients d'automatisation). Avec une DLL COM en cours de processus, je pense que vous pouvez simplement vous désengager de la sécurité de type automatisation et transmettre directement votre TObject. Mais il y a longtemps que j'ai fait COM à ce niveau, donc je me trompe peut-être. – Deltics