Problème interfacage VBA/C++

loiclm86 Messages postés 21 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 3 février 2010 - 21 juil. 2009 à 15:58
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 22 juil. 2009 à 12:13
Bonjour,

Je cherche réaliser un programme tout simple en interfaçant VBA et C++ via visual studio. Ma fonction C++ est:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

double* multip(double* a, int n)
{
for (int i=0;i<n;i++)
a[i]=1;
return a;
}

et mon code vba est :

Private Declare Function multip Lib "C:\Documents and Settings\ut15q5\Desktop\prog\projet_test2\debug\projet_test5.dll" _
(ByRef a As Double, ByVal n As Long) As Double

Public Sub mult()
Dim vals() As Double
ReDim vals(4)
Dim i As Integer
For i = 0 To 3
vals(i) = Cells(9 + i, 10)
Next i
vals = multip(vals(0), 4)
End Sub


En gros, je veux choper un tableau de 4lignes/1colonne dans excel et le transformer en tableau de 1. Mais j'ai l'impression qu'il y a un problème avec les types (array, double*, etc...) et je ne m'en sors pas. Le message d'erreur est "compile error : can't assign to array"
Quelqu'un a-t-il une idée ?

Merci d'avance

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 juil. 2009 à 19:05
pourquoi ta fonction est elle definie en double* ?

double suffit

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
loiclm86 Messages postés 21 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 3 février 2010
21 juil. 2009 à 22:49
je retourne un vecteur de double donc un double*. La version avec double seulement qui calcule la norme par exemple fonctionne.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 juil. 2009 à 00:42
en ce cas, c'est ta déclaration API qui coince...

déclare en tant que Double()


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
loiclm86 Messages postés 21 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 3 février 2010
22 juil. 2009 à 11:22
en fait je précise :
quand je mets en déclaration API un type double() en retour, j'obtiens le message d'erreur "subscript out of range" et quand je mets double seulement, j'obtiens "can't assign to array".
Qué ????
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 juil. 2009 à 11:35
Te faut adapter un minimum ton code...

en C, tu bosses avec double* et les double sont a la queue leu leu

mais VB bosse avec des SAFEARRAY.... tu dois donc renvoyer non pas un Double() mais un SAFEARRAY*



Quel est le but final de ta fonction C ?



Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
loiclm86 Messages postés 21 Date d'inscription dimanche 5 avril 2009 Statut Membre Dernière intervention 3 février 2010
22 juil. 2009 à 12:10
dans excel on a 4 nombres à la suite sur une colonne. Je prend ces données dans vba, je les traite en les passant à visual (disons on transforme (3,4,5,6) en (1,1,1,1) par exemple pour faire simple) et visual les refile à excel via la macro vba. J'affiche le tout avec msgbox.

Je vais essayé ton truc des safearray...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 juil. 2009 à 12:13
ok, en ce cas, le plus simple est de passer l'adresse du premier element du tableau.

ainsi, en C tu peux modifier les valeurs sur place, en utilisant bêtement un double*


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous