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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <abert058@hotmail.com> a écrit dans le message de news:
Ob0ovsmCIHA.1208@TK2MSFTNGP05.phx.gbl...
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
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