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

WinDev Discussion :

Transposition de Language C++ vers Windev (SimConnect.dll)


Sujet :

WinDev

  1. #41
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Bonjour Patrice

    Je vais preparer mon projet test.
    Pourriez vous me rappeler comment passer tout un code du francais vers l'anglais sans avoir à tout récrire dans WD.

    Pensant ce temps je fais aussi le test de ce que vous avez envoyé.

    Merci

  2. #42
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Vous pouvez l'envoyer en français, je ferai la conversion moi-même.

    Sinon dans ma version anglaise WD26 c'est :
    "Code", "Convert code" (languages) --> "Translate into french"

  3. #43
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Patrice Terrier Voir le message
    Vous pouvez l'envoyer en français, je ferai la conversion moi-même.

    Sinon dans ma version anglaise WD26 c'est :
    "Code", "Convert code" (languages) --> "Translate into french"
    Je venais justement ici pour vous fire que j'avais trouvé.
    Je ne l'avais jamais utilisé auparavant
    Merci

  4. #44
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Pour Patrice,

    Voici mon Test : https://fromsmash.com/Simconnect-Test-Mini

  5. #45
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Je viens de tester ton MINISIM

    C'est ok !!!!!!!!!!!!!!!!

    Il n'y a qu'un petit soucis, c'est que les valeurs ne sont pas mis à jour en laissant tourner le projet en debug.
    Si je relance le debug, alors là, oui les nouvelle valeurs s'inscrivent.

    Mais le principe est bon.

    Ne serait-il pas possible de faire la même chose sans avoir à passer par une DLL d'interfaçage en se basant sur mon code ?
    Je reste persuadé que j'ai un soucis de passage et traitement de variable.

    Encore et toujours Merci !!!

  6. #46
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Je ne vois pas la fenêtre du PopUp. Ce n'est pas grave du tout

    Il me reste à comprendre comment cela fonctionne car je n'ai pas encore trouvé trace de l'appel à ta DLL et celle de SimConnect.
    En tous cas si c'est possible de cette manière , je suis persuadé que c'est possible avec mon principe. C'est juste qu'il me manque un petit quelque chose.

  7. #47
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    La fenêtre du popup est créée directement avec l'API bas niveau dans MainSection et la fonction se nomme MainWindow
    C'est l'API CreateWindowEx qui est utilisée avec la callback WndProc pour récupérer les messages envoyés par SIM.dll et SimConnect.dll

    De cette façon je suis certain de bien récupérer les messages, sans aucune interférence WinDev et avec un handle qui est indépendant de celui du runtime WD.

    Note : SIM.dll utilise zTrace64.dll pour afficher des messages comme avec la fonction Trace de WinDev.

    Si vous le souhaitez je peux vous envoyer le projet VS2019 qui permet de créer SIM.dll.

    Je vais maintenant télécharger votre projet WinDev pour voir ce que je peux faire.

  8. #48
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Pour la SIM.DLL, je veux bien car cela me permettra de bien comprendre et éventuellement de cherche dans ce sens pour adapter la dll à mon projet. Il n'en reste pas moins que la meilleur solution serait de trouver pourquoi je n'arrive pas à récupérer les data en sortie de l'API et pourquoi j'ai une fonction de l'API qui ne renvoie un E_FAIL au lieu d'un S_OK.

    Je ne pense qu'on loupe beaucoup d'info et puis ce n'est pas grave car même une info toutes les secondes me suffirait presque car, pour ce que je veux faire, il peut y avoir un petit délai, au pire.

    Pour le fait que les données soient figées, je pense que vous avez dû utiliser le paramètre SIMCONNECT_PERIOD_ONCE au lieu de SIMCONNECT_PERIOD_SIM_FRAME, voire SIMCONNECT_PERIOD_SECOND dans le RequestDataOnSimObject.

    Merci

  9. #49
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Bon, je viens de consulter votre code et d'emblée je détecte un certain nombre de problèmes dans l'utilisation du mot clé "API", au niveau des paramètres utilisés.
    Il faut réécrire tous les appels à SimConnect dans une procédure globale propre, en respectant scrupuleusement le type des paramètres attendus.

    Je vais faire çà en 17, car l'environnement de la 26 ne me convient pas du tout (je suis toujours à chercher où se trouvent les choses).

  10. #50
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Patrice Terrier Voir le message

    Bon, je viens de consulter votre code et d'emblée je détecte un certain nombre de problèmes dans l'utilisation du mot clé "API", au niveau des paramètres utilisés.
    Il faut réécrire tous les appels à SimConnect dans une procédure globale propre, en respectant scrupuleusement le type des paramètres attendus.
    Haaaa... ok
    Il faut fonction créer une collection de procédure, créer les déclarations et créer les fonctions que j'aurai besoin avec les paramètres locaux tels qu'ils doivent l'être pour la fonction SimConnect. Et chaque procédure doit comporter qu'une seule ligne de code pour l'appel à l'api.
    C'est cela ?

    Ce serait donc à cause de cela que je n'ai pas les valeurs qui passent correctement.

    Je vais commencer à en faire une ou deux (avant de faire trop de betises ) et je pourrai comparer avec ce que tu fais.

    Je comprends maintenant pourquoi tu avais refait les fonctions dans ton exemple de minisimconnect.


    Merci

  11. #51
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Je suis intéressé quand même par le code pour la SIM.dll. Je pourrais ainsi mieux comprend le passage de variable et la création de dll dans Visual Studio.

    Merci

  12. #52
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Je viens de terminer la transposition en WD17, je posterai demain la version WD26, car je suis incapable de tester le code moi-même n'ayant pas FS.
    Je posterai également le code Visual Studio 2019 pour SIM.DLL

    Quand je vois la taille du framework PC-Soft pour faire tourner ce petit bout de code, je me dis que WinDev n'est vraiment pas fait pour çà.

  13. #53
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Ok, d'accord Patrice. Merci.

    C'est vrai que le framework WD est lourd mais je n'ai pas assez d'expérience avec VS .

    De plus j'aimerais ajouter une cartographie style radar avec les contours des paus ai di que les zones récupérées sur Navigraph pour avoir les Airac (tout cela est lié à l'aviation bien sûr)

    Merci, je lirai ton code pour encore mieux comprendre.

  14. #54
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Bonjour

    Vous trouverez ci-dessous un lien pour télécharger les 2 archives qui se trouvent dans SimConnect17.zip.
    1 - SimConnect.zip (version WD17, attention le dossier Exe est vide, il faut y ajouter les DLL de FS)
    2 - SIM.zip (projet VS2019 contenant le code source de la DLL de test)

    http://www.objreader.com/download/demo/SimConnect17.zip

    J'espère que le code WD fonctionnera car je n'ai pas pu le tester.

  15. #55
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Merci Patrice,

    Au premier lancement, j'ai :

    Le passage du paramètre 2 a provoqué une erreur.
    Un élément de type 'entier système' ne peut pas être converti vers le type 'entier'.

    Pile des appels :
    Procédure globale SimConnect_GetNextDispatch (SimConnect.SimConnect_GetNextDispatch), ligne 2
    Clic sur BTN_Test (WinMain.BTN_Test), ligne 42

    Date : 21/01/2022 12:11:35
    Projet : SimConnect

    Informations supplémentaires :
    Code erreur : 1021
    Module : wd260vm64.dll (01F260101d - 26.0.480.22)

    Informations de débogage :
    UEL = 69
    EIT_TYPE_WDFILE : <7>
    EIT_IDCODE : <458752>
    Il s'agit de cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FUNCTION SimConnect_GetNextDispatch(LOCAL hSim is system int, ppData is SIMCONNECT_RECV, pcbData is unsigned int)
    nRet is unsigned int = SysToUint(API("SimConnect_GetNextDispatch", hSim, &ppData, &pcbData))
    RESULT nRet
    Est-ce que SimConnect_GetNextDispatch attendrait un entier au lieu d'un entier système dans la variable hSim ? Ce serait étonnant car dans mes essais il acceptait bien un entier système.

  16. #56
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Le problème c'est que ppData est un pointeur vers un pointeur, c'est pas évident à traduire en WinDev.

    https://docs.flightsimulator.com/htm...xtDispatch.htm

    Essayez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pcbData is unsigned int = 0
    pData is SIMCONNECT_RECV; variablereset(pData)
    ppData is system int
    transfer(&ppData, &pData, 8)
     
    nRet is unsigned int = SysToUint(API("SimConnect_GetNextDispatch", gP.hSimConnect, &ppData, &pcbData))

  17. #57
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Voici l'erreur générée :

    Le passage du paramètre 2 a provoqué une erreur.
    Un élément de type 'entier système' ne peut pas être converti vers le type 'entier'.

    Pile des appels :
    Clic sur BTN_Test (WinMain.BTN_Test), ligne 44

    Date : 21/01/2022 14:20:22
    Projet : SimConnect

    Informations supplémentaires :
    Code erreur : 1021
    Module : wd260vm64.dll (01F260101d - 26.0.480.22)

    Informations de débogage :
    UEL = 69
    EIT_TYPE_WDFILE : <2>
    EIT_IDCODE : <18>
    Pour être sûr que j'ai bien fait la modif au bon endroit :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    ...
     
    IF gP.hSimConnect THEN
     
    	Trace("Connecté au Simulateur !")
     
    	nRet = SimConnect_AddToDataDefinition(gP.hSimConnect, DEFINITION_1, "Title", Null, SIMCONNECT_DATATYPE_STRING256, 0, 0)
    	nRet = SimConnect_AddToDataDefinition(gP.hSimConnect, DEFINITION_1, "KOHLSMAN SETTING HG", "inHg", 0, 0, 0)
    	nRet = SimConnect_AddToDataDefinition(gP.hSimConnect, DEFINITION_1, "PLANE LATITUDE", "degrees", 0, 0, 0)
    	nRet = SimConnect_AddToDataDefinition(gP.hSimConnect, DEFINITION_1, "PLANE LONGITUDE", "degrees", 0, 0, 0)
     
    	nRet = SimConnect_RequestDataOnSimObject(gP.hSimConnect, REQUEST_1 , DEFINITION_1 , SIMCONNECT_OBJECT_ID_USER , SIMCONNECT_PERIOD_SIM_FRAME, 0, 0, 0, 0)
     
    	pcbData	is unsigned int = 0
    	pData	is SIMCONNECT_RECV; VariableReset(pData)
    	ppData	is system int
    	Transfer(&ppData, &pData, 8)
     
    	gP.BoucleEnCours = True
     
    	WHILE gP.BoucleEnCours
     
     
    		nRet = SysToUint(API("SimConnect_GetNextDispatch", gP.hSimConnect, &ppData, &pcbData))   //  <--- LIGNE 44
     
     
    ...

    Dans l'Editeur de code j'ai :
    "Vous avez appelé la fonction API.
    Le passage du paramètre 2 a provoqué une erreur.
    Un élément de type 'entier système' ne peut pas être converti vers le type 'entier'."

    S'il s'agit du paramètre 2 de la fonction API, alors c'est le handle gp.hSimConnect qui poserait problème. non ?

  18. #58
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    J'ai fait un essai en modifiant la procédure SimConnect_GetNestDispatch de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FUNCTION SimConnect_GetNextDispatch(LOCAL hSim is system int, ppData is SIMCONNECT_RECV, pcbData is unsigned int)
    nRet is unsigned int = SysToUint(API("SimConnect_GetNextDispatch", SysToInt(hSim), &ppData, &pcbData))
    RESULT nRet
    Je n'ai plus d'erreur mais je ne suis pas certain du tout que le bon handle soit transmit.
    D'ailleurs je viens de vérifier et il est différent effectivement.
    Il faudrait peut-être le passer sur un INT sur 8 octets, non ?

  19. #59
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    hSim (gP.hSimConnect) doit être impérativement un entier system.

    Autre essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    nRet = SimConnect_GetNextDispatch(gP.hSimConnect, &ppData, pcbData)
     
     
    FUNCTION SimConnect_GetNextDispatch(LOCAL hSim is system int, ppData is system int, pcbData is unsigned int)
    nRet is unsigned int = SysToUint(API("SimConnect_GetNextDispatch", hSim, ppData, &pcbData))
    RESULT nRet

  20. #60
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2007
    Messages : 57
    Points : 7
    Points
    7
    Par défaut
    Oui ok, je veux bien mais j'ai toujours cette erreur :

    Le passage du paramètre 2 a provoqué une erreur.
    Un élément de type 'entier système' ne peut pas être converti vers le type 'entier'.

    Pile des appels :
    Procédure globale SimConnect_GetNextDispatch (SimConnect.SimConnect_GetNextDispatch), ligne 3
    Clic sur BTN_Test (WinMain.BTN_Test), ligne 47

    Date : 21/01/2022 15:51:33
    Projet : SimConnect

    Informations supplémentaires :
    Code erreur : 1021
    Module : wd260vm64.dll (01F260101d - 26.0.480.22)

    Informations de débogage :
    UEL = 69
    EIT_TYPE_WDFILE : <7>
    EIT_IDCODE : <458752>
    On s'oriente sur des tests avec des modifications sur pData (ou ppData), le paramètre 2 n'est pas celui-ci.
    Dans la fonction API (car il s'agit bien de l'appel API qui est concerné par l'erreur - j'ai vérifié et puis c'est à la ligne 3 et la ligne 3 c'est l'appel API) les paramètres sont :
    - paramètre 1 = nom de la fonction
    - paramètre 2 = hSim ((celui qui nous intéresse par l'erreur renvoyée)
    - paramètre 3 = pData ou ppData
    - paramètre 4 = pcbData

    Donc, à mon avis, tant que le problème de hSim n'est pas réglé, je pense que cela va être difficile.

    Pendant ce temps j'ai créer une procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FUNCTION SysToInt8(LOCAL nSys is system int)
    nRet est un entier sur 8 octets = 0
    Transfer(&nRet, &nSys, 8)
    RESULT nRet
    Pour le coup je n'ai plus d'erreur et grace au traçage la valeur de hSim est la même que SysToInt8(hSim).
    Qu'en penses tu ?

Discussions similaires

  1. Migration Acess vers Windev 11 ou 12
    Par kommen dans le forum Access
    Réponses: 3
    Dernier message: 31/01/2008, 11h57
  2. [Windev 11] Migration VB6 vers Windev
    Par sterix92 dans le forum WinDev
    Réponses: 4
    Dernier message: 26/12/2007, 15h57
  3. extraction vers windev --> ajout d'espaces à droite
    Par Arnaud M dans le forum Informix
    Réponses: 3
    Dernier message: 26/03/2007, 09h51
  4. Migration WinDev 7 vers WinDev 8
    Par amarni dans le forum WinDev
    Réponses: 7
    Dernier message: 13/10/2006, 18h58
  5. Traduction des Union C/C++ vers Delphi (usage DLL)
    Par Crafton dans le forum Langage
    Réponses: 6
    Dernier message: 22/02/2006, 08h56

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