Newsgroup: it.comp.lang.visual-basic
Titolo: COM, Visual Basic ed array di byte

Salve a tutti.
Ho un discreto problema che mi sta' facendo venire il mal di testa: ho
scritto una DLL COM che espone un metodo a cui devo passare un array di byte
e che me ne deve restituire un'altro.
Ho letto su msdn che nello scrivere oggetti COM per passare gli arry di
qualsiasi tipo si devono usare i SafeArray. E fin qui ci siamo, ho
implementato l'oggetto in quel modo...quello che non riesco pero' a capire
e' come chiamare il metodo in questione da VB.
Cioe', come chiamarlo lo so' :-)
E' il passaggio di parametri che mi lascia perplesso...qualcuno ha gia'
fatto qualcosa di simile?

Drizzt wrote:


Esattamente come hai implementato il metodo?
Nel file IDL esso dovrebbe avere una forma simile a:
HRESULT MyMethod([in, out] SAFEARRAY(unsigned char)* InputArray, [in, out]
SAFEARRAY(unsigned char)* OutputArray);
Ammesso che tu abbia scritto la DLL COM in VC++... o che comunque tu abbia
definito le interfacce in una type library.
Se invece la DLL COM è interamente in VB, allora il tipo SAFEARRAY manco
lo vedi...
Ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 manco lo vedi...
Ecco, appunto, l'oggetto COM e' scritto in Java ^__^

Ecco, appunto, l'oggetto COM e' scritto in Java ^__^
Questa poi... usare Java per scrivere componenti COM!
Comunque gli array di vb sono gia' SAFEARRAY.
Quando in VB si dichiara 
Dim ciccio() As Byte
non si indica un puntatore ai dati dell'array, ma
ad una struttura che descrive l'array: SAFEARRAY.
Come hai dichiarato in java la funzione che riceve l'array?
-- 
ciao, hal

Stavo pensando che, pro', qualche problema potresti effettivamente
averlo.
Nella definizione dell'interfaccia potresti definire come Variant
il parametro relativo all'array ed implementarlo in java come
Object.
-- 
ciao, hal


Grazie dei consigli, ma nel frattempo ho risolto il tutto. ^__^
FUNZIONA! ^__^
Il Java prende e restituisce dei Variant, che contengono al loro interno i
SafeArray con i dati necessari.
Da Visual Basic si puo' a quel punto interagire senza problemi, tanto il
casting e' automatico.
Per intenderci, il metodo Java e' dichiarato come
public Variant Decode(Variant vntData, long lngDataLen);
A quel punto da Visual Basic si puo' chiamare il metodo o passando dei
Variant che contengono i dati desiderati, o passando direttamente i dati.
Caso 1: vntDecoded = objX.decode(vntToDecode, 10)
Caso 2: rngDecoded = objX.decode(rngToDecode, 10)
Son contento :-)

public Variant Decode(Variant vntData, long lngDataLen);
ma e' java o J++?
-- 
ciao, hal


Buona la seconda. Scusa, ma stasera ho le dita che vanno da se' e mi scordo
i pezzi nella tastiera.

i pezzi nella tastiera.
se puoi scordarti anche un panino farcito va bene lo stesso ;-)
-- 
ciao, hal
che fra un po' tocca allo spuntino di mezzanotte

 se puoi scordarti anche un panino farcito va bene lo stesso ;-)
Spiacente, ho appena fatto fuori una valdostana (fatta da mamma nel forno a
legna) e due boccali di spremuta (fatti da papa' con gli aranci dell'albero
in giardino).
Niente panini ;-)
Pero' quasi quasi mi faccio un the'...
Ok, tornando IT: il java e' orribile...

il java e' orribile...
Si', ma anche tu, usarlo per produrre un componente COM... :-P
-- 
ciao, hal

 Si', ma anche tu, usarlo per produrre un componente COM... :-P
In realta' non era quello l'obiettivo, ma gia' che c'ero...il punto e' che
avevo gia' fatto tutto il lavoro lato server con una pagina ASP. Poi mi sono
reso conto che rivendere una pagina ASP significa regalare del sorgente,
quindi ho approfittato e uno mi sono rinfrescato la memoria (era un pezzo
che non programmavo in Java), due posso ridistribuire il coso senza
problemi.
Quando sono passato al lato VB-client, mi sono reso conto che i dati che
ricevevo dal server erano elaborati in un modo complicato da trattare in VB.
Cosi' ho aggiunto un metodo alla libreria COM per decodificare i dati,
facendolo diventare un oggetto COM a tutti gli effetti (prima in pratica era
si un'oggetto, ma usabile solo lato server se richiamato da una pagina ASP).
Mese prossimo, visto che sono un po' arrugginito con il VC++ (il VC no, lo
conosco benissimo, ma il ++ mi resta sul gozzo), riscrivero' l'OCX in tale
linguaggio.
Poi riprendero' in mano PHP, Perl, e DX...ma quello e' un altro discorso :-)