IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

dll c++ / VBA


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Par défaut dll c++ / VBA
    Bonjour,
    J'ai un petit problème avec une dll. En effet, j'aimerais manipuler des matrice avec des dll a fin de faire des calculs matriciels sous Excel. Pour cela j'ai commencé par une simple dll:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // in : matrix , out : matrix
    LPSAFEARRAY FAR *  __stdcall Optimization(LPSAFEARRAY FAR *variance){ 
        return variance;
    }
    et je l'appelle sous VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Declare Function Optimization Lib "Optimization.dll" (integerArray() As Variant) As Variant
        Sub test1()
           Dim a() As Double
           ReDim a(1 To 3, 1 To 3) As Double
               For u = 1 To 3
                   For v = 1 To 3
                       a(u, v) = 0
                   Next
               Next
        bb = Optimization(a())
        End Sub
    Comme vous pouvez le voir, c'est très simple; par contre quant je compile il me sort cette erreur : " Expression trop complex" (i.e. bb = Optimization(a()) )
    Merci d'avance.

    Ya²

  2. #2
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Je ne connais pas la solution; mais je peux donner plusieurs pistes
    le type variant de vb,je ne pense pas que ce soit la bonne façon de passer des variables vers une dll. j'essyareais plutot de declarer en long

    Déclarer un tableau, pas nescessairement une bonne idée non plus, je pense, il doit suffire de passer un pointeur sur le tableau

    Je verrais bien donc quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function Optimization Lib "Optimization.dll" (integerArray As Long) as Long
    Pour compenser, si c'est toi qui a ecrit la dll en C++, il serait interessant de passer en plus le nombre d'elements du tableau
    Ce qui ferait alors un definition de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function Optimization Lib "Optimization.dll" (integerArray As Long, ByVal cCount1 As Long,, ByVal cCount2 As Long) as Long
    En faisant l'appel de la fonction, on passerait alors le premier element du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bb = Optimization(a(0,0),3,3)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Par défaut
    J'ai fait comme vous m'avez conseillé mais ça marche toujours pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    double **  __stdcall Optimization(double**variance, int  dim1, int  dim2){
     
    	int i, j;
    	double** weight_optim;
    	for (i=0; i<dim1; i++)
    	{
    		for (j=0; i<dim2; i++)
    		{
    			variance[i][j]=1;
    		}
    	}
    	weight_optim=variance;
        return weight_optim;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Declare Function Optimization Lib "Optimization.dll" (integerArray As Double, ByVal cCount1 As Double, ByVal cCount2 As Double) As Double
     
     
        Sub test1()
           Dim a() As Double
           ReDim a(0 To 2, 0 To 2) As Double
               For u = 0 To 2
                   For v = 0 To 2
                       a(u, v) = 0
                   Next v
               Next u
        tt = Optimization(a(0, 0), 3, 3)
        End Sub

Discussions similaires

  1. Plantage d'excel à cause d'un appel DLL en vba
    Par alpha35 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/09/2007, 20h17
  2. probleme de dll sous vba
    Par deubelte dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/05/2007, 10h01
  3. dll c++ / VBA
    Par yasquare dans le forum Général VBA
    Réponses: 5
    Dernier message: 08/04/2007, 19h09
  4. Dev-c++ Class -> Dll -> Object Vba Excel
    Par fx_forum dans le forum Dev-C++
    Réponses: 6
    Dernier message: 06/10/2006, 19h34
  5. appel de dll depuis VBA
    Par darkman10 dans le forum Windows
    Réponses: 3
    Dernier message: 10/05/2006, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo