Logo UGIdotNET

Discussione 'Recuperare un buffer restituito da un metodo di un activex'

# Pubblicato il 01 mar 2004 13.56 - Rispondi
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
# Pubblicato il 31 mar 2004 22.30 - Rispondi
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
# Pubblicato il 01 apr 2004 11.06 - Rispondi
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
# Pubblicato il 01 apr 2004 21.54 - Rispondi
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
# Pubblicato il 02 apr 2004 9.47 - Rispondi
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


© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185