rniamo
Messages postés16Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 1 mars 2009
-
28 févr. 2009 à 22:21
rniamo
Messages postés16Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 1 mars 2009
-
1 mars 2009 à 23:16
bonjour, j'ai une dll en c++ qui fonctionne parfaitement avec des projets c++.
pour faire simple elle intègre 2 fonctions exportées :
f1() et f2()
- f1() fonction en l'important dans excel
- f2() me renvoie : Erreur d'execution : 2147417848 (80010108 erreur d'automation , l'objet invoqué s'est deconnecté de ses clients)
pour info, les paramètres sont à peu près les mêmes.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 28 févr. 2009 à 22:29
Penses-tu que les CodeS-Sourciens sont diplomés en grigri africain, en magie vaudou, en météo ou tout autre art divinatoire pour qu'ils donnent un evis sans la moindre ligne de code ???
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 1 mars 2009 à 10:19
Sachant que du coté VB on a:
Dim t1() As Double, t2() As Double, t3() As Double
et que je présume ces tableaux correctement remplis avant l'appel:
i = f2(d, t1(0), UBound(t1) + 1, t2(0), UBound(t2) + 1, t3(0))
Il faudrait la déclaration que tu mets dans VB:
Declare .... f2(...) As ...
et surtout le but de cette fonction expliqué en PSEUDO code.
Si ce n'est pas une usine à gaz, je trouverai un moment pour la réétudier en C.
rniamo
Messages postés16Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 1 mars 2009 1 mars 2009 à 10:34
en fait pour expliquer en gros : f2 prend en paramètres d'entrées un entier (d), 2 tableaux (t1 et t2 + leurs tailles) et remplis le tableau t3 à partir de tout ça.
Pour cela je créé une matrice qui a le constructeur ci-dessus et un vecteur colonne (matrice à 1 colonne). Pour ce dernier pas de problème mais pour la matrice rectangulaire ça plante excel.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 1 mars 2009 à 10:55
Si je comprends, le problème est pour générer un tableau exploitable depuis VB.
Si c'est bien cela, jette un oeil sur cet exemple:
GENERATEUR DE TABLEAUX DE NOMBRES POUR VB/VBA
http://www.vbfrance.com/code.aspx?ID=33938 et en ce cas, exit les surcouches (à la con...) du C++, il faut coder vraiment.
rniamo
Messages postés16Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 1 mars 2009 1 mars 2009 à 11:13
le problème est en C++, mes matrices ne sont accessibles qu'en c++. "les surcouches à la con" est dans ce cas précis la stl donc le à la con ...
je ne vois pas ce qui pose problème dans ce cas précis. Je peux trés bien faire mes allocation avec des new mais c'est moins modifiable (un redim avec delete + new est lourd) ou moins simple (double pointeur : 1 pour malloc et 1 pour new) et c'est contraire à l'esprit c++ surtout.
rniamo
Messages postés16Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 1 mars 2009 1 mars 2009 à 11:38
byref envoie un pointeur, et on accède sans soucis au tableau en connaissant sa taille. De plus le problème n'est pas dans le transfert des données puisque quand la matrice est crée, les données t1 et t2 sont déjà transférés dans des structures c++ et t3 n'est pas encore utilisé.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 1 mars 2009 à 18:59
Tu ne feras pas de SAFEARRAY avec les arguties du C++ (new, etc...).
new est un appel masqué, après moult détours, vers HeapAlloc et ce n'est pas possible.
Je t'ai donné un exemple, faut le suivre.
rniamo
Messages postés16Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 1 mars 2009 1 mars 2009 à 19:11
soit c'est moi soit c'est toi mais un de nous 2 comprends pas (je n'ai peut être pas été assez clair et si c'est le cas je m'en excuse) :
j'ai besoin d'un tableau (d'où le new) mais il n'a rien à voir avec le vba, c'est un tableau de travail si tu veux. Je ne vois aps pourquoi j'utiliserais un SAFEARRAY dans ce cas.
rniamo
Messages postés16Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 1 mars 2009 1 mars 2009 à 19:49
bon #define INC_OLE2 manquait. je teste ... mais je veux l'explication du pourquoi je dois utiliser un safearray alors que le tableau ne touche pas aux données du vba
rniamo
Messages postés16Date d'inscriptionjeudi 18 janvier 2007StatutMembreDernière intervention 1 mars 2009 1 mars 2009 à 21:01
après plusieurs manipulation visant à mettre en entrée des SAFEARRAY (c'est plus lisible mais le résultat est le même) je me suis rendu compte que la fonction marchait (safearray ou pas) et que le problème venait certainement du code vba autour (cf mon message du 28/02 à 23h20).
j'ai changé des noms de variable et ça marche ... je ne sais pas vraiment pourquoi ...
en tout cas, [../auteur/BRUNEWS/39449.aspx BruNews], je te remercie pour tes réponses.