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

Passage argument array 2 dimension de .NET à VB6

1 réponse
Avatar
A.Bertato
Bonjour,

J'essaye d'utiliser un assembly VB.NET à partir de VB6, pour cela j'ai créé
une library de classes et j'ai utilisé les instructions pour la rendre
visible dans COM.

J'ai juste un problème si j'utilise la liaion précoce, toutes les routines
ou fonctions ayant comme argument un array à 2 dimensions fonctionnent
pas...

Il y a un moyen de passer des tableaux à 2 dim de l'assembly par Interop à
VB6 (COM)?

Voici mon code, la première sub fonctionne sans problème la seconde non.

Je supose que c'est l'argument Tgen(,) as double qui pose problème, car si
je met Tgen as double c'est ok dans l'appel dans VB6....

Sinon j'ai une erreure de compil : "Function or interface marked as
restricted, or the function uses an Automation type not supported in Visual
Basic"

appel en VB6

Dim myGeneration As New COMGenFrzRuckMob.Generation 'use early binding

' fabrication pt par pt du profil original
'****************************************************************************************************
Call myGeneration.Original(Tgen, MAXPTS, Narg, Tres, Ntres(3), It_mz,
Temtas, Tem_cons, nbz_insuf)
'****************************************************************************************************

ma librairie en VB.NET 2005

Imports System.Math

Imports System.Runtime.InteropServices

<Guid("fb6207fe-959e-4129-806b-387eab2d51f5")> Public Interface _Generation

<DispId(1)> Sub Ccle_Rpp_Ctt(ByVal R As Double, ByVal X1 As Double, ByVal Y1
As Double, ByVal X2 As Double, ByVal Y2 As Double, _

ByRef P As Double, ByRef Q As Double, ByRef Te As Double, ByRef Ts As
Double, ByRef ksol As Integer)

<DispId(2)> Sub Original(ByVal Tgen(,) As Double, ByVal Ntgen As Integer,
ByVal Ng As Integer, ByRef Tres(,) As Double, _

ByRef Nr As Integer, ByRef It_mz As Integer, ByRef Temtas As Integer, ByRef
Tem_cons As Integer, _

ByVal Del_cons As Integer)

<DispId(3)> Sub Generer(ByVal Rgo As Double, ByVal Zo As Integer, ByVal
Tab_don(,) As Double, ByVal Ntdon As Integer, _

ByVal Narg As Integer, ByVal It_mz As Integer, ByVal deport_y As Single, _

ByRef Tres(,) As Double, ByRef Nres As Integer, ByRef Zr As Integer, ByRef
Rgr As Double, ByRef It_cor As Integer)

<DispId(4)> Sub Remplissage(ByVal It_mz As Integer, ByRef Tres(,) As Double,
ByRef Nres() As Integer, ByVal Ncol As Integer, _

ByVal Temtas As Integer, ByVal Temcons As Integer, ByVal MAXRES As Integer)
End Interface

<Guid("6915fc71-a359-45fd-8ace-669ebf7afb40")> Public Class Generation

Implements _Generation

<DispId(1)> Public Sub Ccle_Rpp_Ctt(ByVal R As Double, ByVal X1 As Double,
ByVal Y1 As Double, ByVal X2 As Double, ByVal Y2 As Double, _

ByRef P As Double, ByRef Q As Double, ByRef Te As Double, ByRef Ts As
Double, ByRef ksol As Integer) Implements _Generation.Ccle_Rpp_Ctt


End Sub

<DispId(2)> Public Sub Original(ByVal Tgen(,) As Double, ByVal Ntgen As
Integer, ByVal Ng As Integer, ByRef Tres(,) As Double, _

ByRef Nr As Integer, ByRef It_mz As Integer, ByRef Temtas As Integer, ByRef
Tem_cons As Integer, _

ByVal Del_cons As Integer) Implements _Generation.Original

Merci pour tout renseignements

alex

1 réponse

Avatar
A.Bertato
On oublie la question, je viens de trouver moi-même la réponse, ... y
fallait juste passer par référence les tableaux, tous les tableaux ...
Donc ByRef TabGen(,) as double !!!!!!!
Ya des jours comme ca :o((
alex

"A.Bertato" a écrit dans le message de news:

Bonjour,

J'essaye d'utiliser un assembly VB.NET à partir de VB6, pour cela j'ai
créé une library de classes et j'ai utilisé les instructions pour la
rendre visible dans COM.

J'ai juste un problème si j'utilise la liaion précoce, toutes les routines
ou fonctions ayant comme argument un array à 2 dimensions fonctionnent
pas...

Il y a un moyen de passer des tableaux à 2 dim de l'assembly par Interop
à VB6 (COM)?

Voici mon code, la première sub fonctionne sans problème la seconde non.

Je supose que c'est l'argument Tgen(,) as double qui pose problème, car si
je met Tgen as double c'est ok dans l'appel dans VB6....

Sinon j'ai une erreure de compil : "Function or interface marked as
restricted, or the function uses an Automation type not supported in
Visual Basic"

appel en VB6

Dim myGeneration As New COMGenFrzRuckMob.Generation 'use early binding

' fabrication pt par pt du profil original
'****************************************************************************************************
Call myGeneration.Original(Tgen, MAXPTS, Narg, Tres, Ntres(3), It_mz,
Temtas, Tem_cons, nbz_insuf)
'****************************************************************************************************

ma librairie en VB.NET 2005

Imports System.Math

Imports System.Runtime.InteropServices

<Guid("fb6207fe-959e-4129-806b-387eab2d51f5")> Public Interface
_Generation

<DispId(1)> Sub Ccle_Rpp_Ctt(ByVal R As Double, ByVal X1 As Double, ByVal
Y1 As Double, ByVal X2 As Double, ByVal Y2 As Double, _

ByRef P As Double, ByRef Q As Double, ByRef Te As Double, ByRef Ts As
Double, ByRef ksol As Integer)

<DispId(2)> Sub Original(ByVal Tgen(,) As Double, ByVal Ntgen As Integer,
ByVal Ng As Integer, ByRef Tres(,) As Double, _

ByRef Nr As Integer, ByRef It_mz As Integer, ByRef Temtas As Integer,
ByRef Tem_cons As Integer, _

ByVal Del_cons As Integer)

<DispId(3)> Sub Generer(ByVal Rgo As Double, ByVal Zo As Integer, ByVal
Tab_don(,) As Double, ByVal Ntdon As Integer, _

ByVal Narg As Integer, ByVal It_mz As Integer, ByVal deport_y As Single, _

ByRef Tres(,) As Double, ByRef Nres As Integer, ByRef Zr As Integer, ByRef
Rgr As Double, ByRef It_cor As Integer)

<DispId(4)> Sub Remplissage(ByVal It_mz As Integer, ByRef Tres(,) As
Double, ByRef Nres() As Integer, ByVal Ncol As Integer, _

ByVal Temtas As Integer, ByVal Temcons As Integer, ByVal MAXRES As
Integer) End Interface

<Guid("6915fc71-a359-45fd-8ace-669ebf7afb40")> Public Class Generation

Implements _Generation

<DispId(1)> Public Sub Ccle_Rpp_Ctt(ByVal R As Double, ByVal X1 As Double,
ByVal Y1 As Double, ByVal X2 As Double, ByVal Y2 As Double, _

ByRef P As Double, ByRef Q As Double, ByRef Te As Double, ByRef Ts As
Double, ByRef ksol As Integer) Implements _Generation.Ccle_Rpp_Ctt


End Sub

<DispId(2)> Public Sub Original(ByVal Tgen(,) As Double, ByVal Ntgen As
Integer, ByVal Ng As Integer, ByRef Tres(,) As Double, _

ByRef Nr As Integer, ByRef It_mz As Integer, ByRef Temtas As Integer,
ByRef Tem_cons As Integer, _

ByVal Del_cons As Integer) Implements _Generation.Original

Merci pour tout renseignements

alex