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
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
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"
Pour Patrice,
Voici mon Test : https://fromsmash.com/Simconnect-Test-Mini
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 !!!
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.
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.
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
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).
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
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
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 çà.
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.
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.
Merci Patrice,
Au premier lancement, j'ai :
Il s'agit de cette fonction :
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>
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.
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
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))
Voici l'erreur générée :
Pour être sûr que j'ai bien fait la modif au bon endroit :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>
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 ?
J'ai fait un essai en modifiant la procédure SimConnect_GetNestDispatch de la façon suivante :
Je n'ai plus d'erreur mais je ne suis pas certain du tout que le bon handle soit transmit.
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
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 ?
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
Oui ok, je veux bien mais j'ai toujours cette erreur :
On s'oriente sur des tests avec des modifications sur pData (ou ppData), le paramètre 2 n'est pas celui-ci.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>
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
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).
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
Qu'en penses tu ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager