Newsgroup: it.comp.lang.visual-basic
Titolo: Chiamate libreria Intel OpenCV da VB

Ciao a tutti,
sto cercando di accedere da vb alle funzioni della libreria OpenCV (Open
Cmoputer Vision) di Intel da VB. La libreria è dichiarata utilizzabile
con C/C++, Delphi e VB, ma non trovo esempi per VB. In particolare,
quando chiamo la funzione cvNamedWindow, mi crea la finestra come
previsto ma VB si interrompe con errore "49-Convenzione di chiamata DLL
non valida". La funzione è dichiarata nell'header C della libreria con
#define CV_WINDOW_AUTOSIZE  1
/* create window */
CVAPI(int) cvNamedWindow( const char* name, int flags
CV_DEFAULT(CV_WINDOW_AUTOSIZE) );
e andando "a naso", vista la mia ignoranza di C e derivati, l'ho
dichiarata in VB con 
Private Declare Function cvNamedWindow Lib
"C:ProgrammiOpenCVbinhighgui100.dll" (ByVal f As String, ByVal flag
As Long) as Long
e richiamata con
dim z as long
z = cvNamedWindow ("Prova", 1)
Qualcuno sa dirmi se sbaglio la dichiarazione o cos'altro?
Grazie anticipatamente
-- 
Beppe


Quasi sicuramente c'è qualcosa che non va nella dichiarazione.
Dai un'occhiata alla sezione 2.1 di questo documento:
 
http://support.microsoft.com/kb/106553/en-us
c'è scritto come convertire correttamente i tipi di dato.
Nella sezione 2.1 c'è anche un link a quest'altro documento:
 
http://support.microsoft.com/kb/118643/EN-US/
interamente dedicato al passaggio delle stringhe da vb a una dll scritta 
in C/C++.
Non ho letto nessuno dei due documenti, ma non mi stupirei se, dopo 
"Prova", dovessi metterci un + Chr$(0) come terminatore di stringa.
Inoltre, nell'header il secondo parametro della funzione è dichiarato 
come int, mentre nella tua dichiarazione usi il long... il problema 
potrebbe anche essere quello. Generalmente i tipi di dato numerici di 
dimensione compresa tra gli 8 e i 16 bit vanno passati tutti come 
Integer (includendo quindi int, unsigned int, short, unsigned short...), 
mentre quelli a 32 bit vanno passati come Long.
Sempre che tu stia usando vb6, of course.
S.

 
Grazie Stevie, provo subito come mi hai detto... in effetti sto usando
vb5, ma non credo che dovrebbero esserci molte differenze con vb6 su
questo specifico punto... o sì?
Ciao
-- 
Beppe

 questo specifico punto... o sì?
Questo purtroppo non te lo so dire, non ho mai avuto occasione di usare vb5.
Non credo, comunque, che questo aspetto sia molto diverso in vb5.
Ciao
S.

Purtroppo non funziona... ho provato con
Private Declare Function cvNamedWindow Lib "highgui100.dll" (ByVal f As
String, ByVal flg As Integer) As Integer
e nella chiamata
Dim h As String, k As Integer, z as integer
h = "Prova": k = 4
z = cvNamedWindow(h, k)
ma niente di fatto, con e senza un Chr$(0) dopo "Prova"...
Unica variazione, la finestra che si crea prima dell'errore è adesso più
"stabile"... prima spariva quando terminavo l'esecuzione del programma VB, ora
persiste: significa qualcosa?
Ma soprattutto: che altro posso provare?
Grazie e scusate per l'assillo.
-- 
Beppe

 ha scritto:

Giusto per completezza... anche se è assurdo...
il codice riportato sopra, se eseguito da ambiente VB dà l'errore che ho
riferito, ma se si compila lo stesso codice e si fa partire l'EXE, questo fa
tutto a dovere e senza battere ciglio!
Non chiedetemi perchè ho fatto questo tentativo... una di quelle cose che si
fanno unicamente per disperazione... spero comunque che possa essere utile a
qualcuno, e magari che qualcun altro sappia pure perchè succede così... anche se
mi sa tanto di bug.
Grazie a tutti, e in particolare a Stevie per le informazioni e l'impegno.
-- 
Beppe

 mi sa tanto di bug.
Accidenti, proprio non ti saprei dire il motivo di questo comportamento.
Il fatto che l'exe funzioni è sì una buona notizia, ma fino a un certo 
punto: il debug diventa più difficile, o quantomeno scomodo.
Dosi massicce di unit testing, mi pare non ci sia altro da fare.
Magari con vb6 funziona, se ti capita fai una prova.
Farei volentieri una prova io, è solo che in questo momento su questa 
macchina non ce l'ho installato  :|
S.