Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Passer des UDT de VB6 à des dll's C

2 réponses
Avatar
epilot10
Bonjour,

j'essaie sans succès de passer des valeurs de UDT (User defined types)
de VB6 à un dll en C.

en VB6, j'ai ceci, dans un module :

Type S52_extent
s As Double
w As Double
n As Double
e As Double
End Type

Public BBOX As S52_extent

Type S52_view
cLat As Double
cLon As Double
rNM As Double
End Type

Public vbox As S52_view

Declare Sub S52_getCellExtent Lib "C:\S52\libS52.dll" (ByVal S52_extent)
Declare Sub S52_setView Lib "C:\S52\libS52.dll" (ByVal S52_view)

Dans une procédure de la forme principale, j'ai ceci :

With BBOX
.s = -3805992.364422 's w n e
.w = 6787910.111066
.n = -3805313.78552
.e = 6788614.986082
End With

With vbox
.cLat = -32.496083
.cLon = 60.98
.rNM = 1#
End With


Call S52_getCellExtent(BBOX)
Call S52_setView(BBOX)
End Sub

A l'exécution (F5), j'obtiens l'erreur suivante :
"Only user-defined types defined in public object modules can be coerced
to or from a variant passed to late-bound functions."

En C, le code ayant servi à créer le lien VB6 - C :

typedef struct S52_extent {
double s,w,n,e; // cell extent: South, West, North, East
} S52_extent;

typedef struct S52_view {
double cLat, cLon, rNM; // center of screen (lat,long), range
of view(NM)
} S52_view;

J'ai tout lu ce que j'ai trouvé sur le net à propos de ça, mais sans
succès, je suis même encore plus mêlé : ByVal, ByRef, Char*, *char,
module d'objet (de classe ou non).

Y a-t-il qq'un qui pourrait m'aider ?

Merci

Jacquelin Hardy

2 réponses

Avatar
jeanmarcnoury
On 4 mai, 20:02, epilot10 wrote:
Bonjour,



Hello,

        j'essaie sans succès de passer des valeurs de UDT (User defined types)
de VB6 à un dll en C.



...

J'ai tout lu ce que j'ai trouvé sur le net à propos de ça, mais san s
succès, je suis même encore plus mêlé : ByVal, ByRef, Char*, *cha r,
module d'objet (de classe ou non).



As tu lu cet artic le de la FAQ:
http://faq.vb.free.fr/index.php?question4
et en particulier les liens proposés en fin d'article, notamment:
http://support.microsoft.com/kb/194609/en-us

et surtout : http://download.microsoft.com/download/5/f/8/5f862469-98d3-493 6-a9d4-a7f83d779493/apiwin32.doc
(celui la est à lire en premier si tu n'es pas à l'aise avec les byval/
byref/char et char*).

Ils contiennent vraiment toute l'info dont tu as besoin. LA lecture de
ces articles suppose une bonne connaissance préalable de C et une
compréhension en profondeur des notions de passage par adresse et par
référence (en VB) ainsi que de la notion de pointeurs pour l'aspect C.

Bonne lecture,

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
epilot10
Merci pour ton aide Jean-Marc,

mes problèmes sont en train de se régler enfin...

Bonne journée

Jacquelin Hardy

______________________________________

a écrit :
On 4 mai, 20:02, epilot10 wrote:
Bonjour,



Hello,

j'essaie sans succès de passer des valeurs de UDT (User defined types)
de VB6 à un dll en C.



...

J'ai tout lu ce que j'ai trouvé sur le net à propos de ça, mais sans
succès, je suis même encore plus mêlé : ByVal, ByRef, Char*, *char,
module d'objet (de classe ou non).



As tu lu cet artic le de la FAQ:
http://faq.vb.free.fr/index.php?question4
et en particulier les liens proposés en fin d'article, notamment:
http://support.microsoft.com/kb/194609/en-us

et surtout : http://download.microsoft.com/download/5/f/8/5f862469-98d3-4936-a9d4-a7f83d779493/apiwin32.doc
(celui la est à lire en premier si tu n'es pas à l'aise avec les byval/
byref/char et char*).

Ils contiennent vraiment toute l'info dont tu as besoin. LA lecture de
ces articles suppose une bonne connaissance préalable de C et une
compréhension en profondeur des notions de passage par adresse et par
référence (en VB) ainsi que de la notion de pointeurs pour l'aspect C.

Bonne lecture,

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;