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

Visual C++ Discussion :

exception non g�r�e entre Excel VBA 2010 et Visual Studio C++ 2022


Sujet :

Visual C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 83
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Par d�faut exception non g�r�e entre Excel VBA 2010 et Visual Studio C++ 2022
    Bonjour
    J�ai un �trange probl�me que je ne sais pas r�soudre.
    Je suis ing�nieur retrait�, et, sans �tre informaticien de formation, ai beaucoup fait de calculs en Fortran et Excel VBA.
    Depuis une douzaine d�ann�es, je m�int�resse aux comp�titions de courses virtuelles � la voile chez Virtual Regatta.
    Et j�ai d�velopp� un routeur, donc un gros programme permettant, � partir des vents pr�vus sur le site m�t�o am�ricain NOAA et de divers fichiers (profils des c�tes, polaires des voiliers � ) de calculer la meilleure route possible pour le voilier.
    Ce routeur est basiquement en Excel VBA 64 bits, avec appel � des routines de calcul dans une dll �crite en Visual Studio C++ 64 bits d�s qu�une partie des calculs devient tr�s lourde.
    Comme je n�ai pas envie de passer du temps � apprendre les subtilit�s de C++, tout est basique. Pas de New, re Redim, � Tous les tableaux sont donc d�finis en dimensions fixes, sans aucune subtilit�.
    Avec la m�me philosophie en VBA.
    J�ai deux ordinateur, un assez gros fixe, vieux i7, 16Go de m�moire, et un vieux portable, i3, 6 Go.
    Et depuis quelques temps, j�ai des plantages en d�bug C++ sur une ligne qui ne pr�sente aucune difficult� : � void __stdcall CopieVentsEC(int & Pr�vision, double & Latitude, double & Longitude, double & Direction, double & vitVentNd) �
    Une exception non g�r�e a �t� lev�e : violation d'acc�s en lecture Longitude a �t� nullptr
    Pr�vision et Latitude sont transmises correctement, pas les trois autres arguments.
    La ligne d�appel en VBA est simple :
    Call CopieVentsEC(Pr�vision - 1, Latitude, Longitude, VentDirection, VentVitesse)
    Et sa d�finition me semble correcte :
    Declare PtrSafe Sub CopieVentsEC _
    Lib "G:\MesFichiers\VirtualRegatta\_C++\_RoutageC93\_RoutageC\x64\Debug\_RoutageC.dll" _
    (Pr�vision As Long, Latitude As Double, Longitude As Double, VentDirection As Double, VentVitesse As Double)
    Mais le plus �tonnant est que, si je copie sans la moindre modif les fichiers du fixe qui plante vers le mobile, le programme y fonctionne parfaitement.
    Sur le fixe, j�ai donc :
    - Gonfl� la m�moire � 16 Go,
    - Totalement r�install� W10 en �crasant tout, avec toutes les mises � jour
    - R�install� Office 2010, donc Excel
    - R�install� Visual Studio C++ 2022, � jour
    - Cr�� un projet neuf dans lequel j�ai inclus mes fichiers sources .cpp et .def
    Bref, j�ai fait tout ce qui me semblait faisable.
    Et �a plante toujours, et seulement sur le fixe.
    Si quelqu�un a une id�e ???
    Merci.
    P.S. Office et Visual Studio sont en 64 bits.

  2. #2
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Bonjour @Reves de gosse 83,

    Il y a beaucoup beaucoup de param�tres qui peuvent entrer en jeu.

    Si votre code est Open Source et que vous n'arrivez pas � faire un code minimaliste pour reproduire le probl�me, pouvez-vous mettre votre projet dans un d�p�t Git comme sur GitHub ou GitLab ?

    Si vous pouvez avoir un Excel et un code C++ (ou mieux un projet VS) minimaliste qui reproduit le probl�me, pouvez-vous les poster dans ce fil de message ?

    J'ai pas mal d'hypoth�ses mais avec un code compilable et "lan�able", on irait directement au point d'achoppements.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 83
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Par d�faut Merci
    Merci pour votre r�ponse, mais � la foi les codes, en C++ et VBA, sont tr�s gros, du genre usine � gaz, mais lorsque je cherche le minimum, tout fonctionne parfaitement dans le passage d'arguments.

  4. #4
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Les gestionnaires de d�p�t Git comme GitHub ou GitLab acceptent des tailles de code source �normes.

    Pour un projet fait par une seule personne, il y a tr�s peu de chance que cela n'entre pas.

    Si votre projet est assez bien structur�, dans quelques r�pertoires, la mise en d�p�t est assez rapide et demande assez peu de manipulation.

    Cela permettrait de facilement partager votre projet avec d'autres personnes, et, en bonus, une sauvegarde de vos sources dans le "cloud".

    Je vous invite chaudement � investir un peu de temps dans la mise en d�p�t de votre projet.

    Sinon, il y a une ambigu�t� dans le code VBA qui me fait tiquer.
    Vous ne sp�cifiez pas dans la signature de votre proc�dure "CopieVentsEC" comment on transmet les param�tres : "ByRef" ou "ByVal" ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 83
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Par d�faut
    En standard, VBA est implicitement par r�f�rence.

  6. #6
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    Passage par r�f�rence, cela implique la mise en place d'un middleware car le mod�le m�moire du C++ n'a rien � voir avec celui de VBA.
    Vous avez vraiment de passer des r�f�rences au code C++ ?
    Si "CopieVentsEC" n'est pas sens� changer les valeurs des param�tres ou que ces changements n'ont pas a �tre visibles par l'appelant, on passe "normalement" les param�tres de type double, float ou les "int" par valeurs.
    Passer des r�f�rences comme param�tre d'une fonction en C++, c'est que l'appelant doit voir les modifications des valeurs faites par la fonction appel�e.

    Moi, de mani�re "naturelle", je ne tente pas de faire du partage de donn�es "implicites" entre des trucs aussi diff�rents (VBA Excel / C++ Runtime).
    J'aurais pass� tous les param�tres par valeur et s'il y a besoin de donn�es en retour, cela serait pass� par une structure COM en type de retour.
    En passant par une structure COM, les 2 runtimes disposes de la m�me repr�sentation "interne" des donn�es.

    Comme il y a une mise en place d'un middleware, on n'est pas � l'abri d'un changement de comportement en fonction de la configuration de la plateforme d'ex�cution.
    Il n'est pas exclu que le middleware fasse l'encapsulation des param�tres via des types COM, mais j'en suis pas s�r.

    Si vous ne voulez pas partager votre projet dans un d�p�t Git, pouvez-vous nous fournir un projet minimal reproduisant le probl�me ?

Discussions similaires

  1. Lien entre Excel (VBA) et SAP (CJ20N)
    Par hell3 dans le forum SAP
    R�ponses: 3
    Dernier message: 24/10/2020, 15h38
  2. [D�butant] Filtrer entre 2 dates un fichier excel � partir de visual studio
    Par LGPC24 dans le forum D�veloppement Windows
    R�ponses: 8
    Dernier message: 04/12/2016, 18h02
  3. Cr�er un lien entre Excel VBA et MySQL
    Par ANOVA dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 02/07/2016, 16h20
  4. vba (word) vers visual studio 2010
    Par knarf44 dans le forum Visual Studio
    R�ponses: 2
    Dernier message: 02/08/2011, 13h49
  5. Choix entre Excel (VBA) et 1 appli exe (Qt)
    Par gui80 dans le forum Langages de programmation
    R�ponses: 1
    Dernier message: 16/03/2011, 11h03

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