Pregunta

Tengo una .NET (4.0) de la interfaz que se implementa con un ServicedComponent COM + clase:

interface DotNetIface
{
    void MethodRef(var System.Guid guid);
    void MethodArray(System.Guid[] guids, params object[] parameters);
    void MethodCStyle([MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.Struct, SizeConst=5)]System.Guid[] guids);
}

Ahora he utilizado el Delphi 2007 Asistente de importación para importar la biblioteca de tipos, y como se esperaba Consigo las siguientes firmas:

procedure MethodRef(var guid : TGuid);
procedure MethodArray(guids : PSafeArray);
procedure MethodCStyle(var guids : ClrGuid /* from mscorlib_TLB */);

Si ahora la palabra el método "ref" como esto funciona bien:

procedure CallByRef(guid : TGuid);
var
    test : TGuid;
begin
    test := ...
    comRef.MethodRef(guid);
end;

Ahora también necesitan el método array

procedure CallArray();
var
    localGuid : TGuid;
    arrayVariant : OleVariant;
begin
    arrayVariant := VarArrayCreate([0,4], varVariant /* dont know here */);
    arrayVariant[0] := localGuid; /* compile error, cannot cast implicitly */

    comRef.MethodArray(PSafeArray(TVarData(arrayVariant.VArray)), /* here this object... PSafeArray works actually*/);
end;

Ahora, por último, i intentado con una matriz de c

procedure CallCStyle();
var
    localGuid : TGuid;
    arrayOfGuid : array [0..4] of ClrGuid;
begin
    arrayOfGuid[0] := ClrGuid(localGuid);

    comRef.MethodCStyle(PSafeArray(/* now i dont know put it*/, /* here this object... PSafeArray works actually*/);
end;

En serio, no sé cómo hacer este trabajo. Espero que alguien tiene más experiencia con el COM de clasificación THX

nodo lateral:

He encontrado VT_CLSID que creo que se puede pasar por SafeArrayCreate, pero no estoy seguro de cómo demandar que

¿Fue útil?

Solución

nunca he intentado lo que necesita, pero una búsqueda rápida se encuentran los siguientes artículos:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top