| Gianluca Carucci |
Recuperare un buffer restituito da un metodo di un activex
Ciao a tutti,
ho un metodo di un activex che ha la seguente firma: void GetHeader(CHAR *header, LONG *hlen); creando il wrapper .net dell'activex con vs mi traduce il metodo così: void GetChar(out sbyte header, out int len); Invocando il metodo del wrapper da .net mi restituisce la lunghezza corretta del buffer ma il valore di header è sempre 0... Come recupero il buffer? Il codice è questo: sbyte[] h = new sbyte[MAX_LEN]; int len; Reader.GetHeader(out h[o], out len); Grazie Gianluca |
| Raffaele Rialdi |
Re: Recuperare un buffer restituito da un metodo di un activex
on 1. Mar 2004 13:56 Gianluca Carucci wrote:
> Ciao a tutti, > ho un metodo di un activex che ha la seguente firma: > void GetHeader(CHAR *header, LONG *hlen); > creando il wrapper .net dell'activex con vs mi traduce il metodo così: > void GetChar(out sbyte header, out int len); > > Invocando il metodo del wrapper da .net mi restituisce la lunghezza corretta > del buffer ma il valore di header è sempre 0... Come recupero il buffer? > Il codice è questo: > sbyte[] h = new sbyte[MAX_LEN]; > int len; > Reader.GetHeader(out h[o], out len); Ciao Gianluca, hai più risolto? Visto che è un oggetto com, bisogna vedere come è stato dichiarato l'IDL. Se in IDL non è stato specificato sizeis(...) allora devi implementarti un custom marshaler. Raffaele |
| Gianluca Carucci |
Re: Recuperare un buffer restituito da un metodo di un activex
Ciao Raffaele,
nell'idl non potevo specificare sizeis() xè ho bisogno di restituire un buffer generico di cui non conosco a priori la lunghezza. Immaginavo dovessi implementare un custom marshaler. Il target dell'activex non era un'applicazione .net ma delphi (purtroppo) e il wrapper .net mi serviva solo x testare il componente. Visto che cmq il problema con delphi non si è posto ho preferito evitare di crearmi il wrapper a mano (o parzialmente a mano), anche se la mia curiosità mi farà tornare sicuramente sull'argomento:) Grazie ancora Gianluca |
| Raffaele Rialdi |
Re: Recuperare un buffer restituito da un metodo di un activex
on 1. Apr 2004 11:06 Gianluca Carucci wrote:
> Ciao Raffaele, > nell'idl non potevo specificare sizeis() xè ho bisogno di restituire un buffer generico > di cui non conosco a priori la lunghezza. Immaginavo dovessi implementare un custom Forse non mi sono spiegato bene. La keyword sizeis nell'IDL serve proprio ad indicare che la lunghezza del buffer è variabile. Infatti l'argomento del size_is è uno dei parametri nella funzione prototipo. Guarda l'esempio: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/midl/midl/size_is.asp Raffaele |
| Gianluca Carucci |
Re: Recuperare un buffer restituito da un metodo di un activex
Forse non avevo capito bene io... Pensavo che come parametro della keyword sizeof bisognasse mettere una costante, mentre vedo dall'articolo segnalato da te che accetta anche parametri della firma del metodo.
Link veramente prezioso:) Proverò al più presto. Grazie mille! Gianluca |