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

Lazarus Pascal Discussion :

Recherche d'informations pour connexion à Flight Simulator


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    informaticien
    Inscrit en
    Février 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Février 2004
    Messages : 7
    Par défaut Recherche d'informations pour connexion à Flight Simulator
    Bonjour, je désire réaliser un programme pour interroger flightsimulator à l’aide du SDK fsuipc delphi. J’ai transposé le programme delphi en freepascal/ lazarus mais je suis bloqué sur des erreurs relatives aux API windows. Je ne trouve pas de discussion relative à ce sujet. Y a t il parmi vous des utilisateurs de fsuipc servant à interfacer des add_ons avec flight simulateur.
    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 659
    Par défaut
    Bonjour,

    La version Delphi fonctionnait sans problème ?

    Si oui, le problème n'est pas tant du domaine des API que de la traduction Delphi->Lazarus. Lazarus étant multiplateforme, il est moins en prise directe avec l'OS. Ces indirections peuvent poser problème comme le scanline qui continue à exister (traduction OK) mais ne fonctionne plus correctement (exécution KO).

    Bon courage.

  3. #3
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Ola !

    Citation Envoyé par Guesset Voir le message
    [...] Ces indirections peuvent poser problème comme le scanline qui continue à exister (traduction OK) mais ne fonctionne plus correctement (exécution KO).
    Je te trouve bien violent,

    En fait, c'est juste une histoire de changement de nom, tiens, regarde, extrait d'un vieux prog de test pour comprendre tout ça (pas simple, je te l'accorde) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var
      BmpS, BmpD: TBitmap; // S comme Source, D comme Destination
      PS, PD: PByte;
    begin
    ...
        bmpD.BeginUpdate();
        //Début des pixels : adresse 1re ligne
        {$IFDEF FPC}
          PS := bmpS.RawImage.GetLineStart(0);
          PD := bmpD.RawImage.GetLineStart(0);
        {$ELSE} // Windows, D7
          PS := bmpS.Scanline[BmpS.Height -1];
          PD := bmpD.Scanline[BmpD.Height -1];
        {$ENDIF}
    C'est utilisé dans une fonction de redimensionnement.

  4. #4
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 659
    Par défaut Calmos
    Bonjour Jipété,
    Citation Envoyé par Jipété Voir le message
    Ola !
    Je te trouve bien violent,
    En fait, c'est juste une histoire de changement de nom, tiens, regarde, extrait d'un vieux prog de test pour comprendre tout ça (pas simple, je te l'accorde) :
    Tu as peut être raison. Je vais me calmer (ou essayer).

    Ce qui me gène est que scanline existe bien sous FPC mais ne fonctionne à peu près correctement que sur un bitmap que l'on vient de créer. Je pense qu'ils l'ont gardé par compatibilité mais qu'ils se sont arrêtés à un transfert statique des adresses ce qui fait qu'à la moindre modification de taille ou de format pixel c'est dans les choux. C'est mon interprétation peut être fausse d'un fonctionnement apparemment abscons..

    J'aurais préféré, soit une reconduite intégrale du scanline de Delphi, soit son absence totale qui est bien compensée par RawImage.GetLineStart. Ca ressemble à la blague : "Demain on roule à gauche et, si ca se passe bien, dans 15 jours on fait la même chose pour les camions".

    Il fait trop chaud pour s'énerver. Je vais continuer à ronchonner autour d'une bière. A la tienne.

    Salut.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    informaticien
    Inscrit en
    Février 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Février 2004
    Messages : 7
    Par défaut Bonjour à tous
    Merci pour vos réponses’ mais je n’ai pas été assez précis. Je ne m’attendais pas avoir beaucoup de réponse sur mon sujet.
    Mon problème se situe à plusieurs niveau dans FCPuser.pas.
    Dans la fonction FSUIPC_Open, le CreateFileMapping ne passe pas la compilation ne passe pas avec le premier paramètre : Thandle($FFFFFFFF) mais avec INVALID_HANDLE_VALUE.
    Ensuite c’est au niveau de FSUIPC_Read qu’il y a une erreur :
    External:ACCES VIOLATION avec : acces violation reading from adress $FFFFFFFFFFFFFFFF.
    Je débute avec Lazarus’ peut être trop compliqué pour une première mais je comprends très bien le déroulement du programme j’ai réalisé plusieurs programmes en utilisant le sdk fsuipc en c++.
    Bonne journée. Je vais me mettre à l’ombre pour me protéger pde la canicule. Kaddor

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Citation Envoyé par kaddor Voir le message
    Dans la fonction FSUIPC_Open, le CreateFileMapping ne passe pas la compilation ne passe pas avec le premier paramètre : Thandle($FFFFFFFF) mais avec INVALID_HANDLE_VALUE.
    1er problème : tu devrais nous donner la ligne entière du code qui coince, précédée de deux ou trois lignes et suivie pareil, pour qu'on capte un peu le contexte.

    Citation Envoyé par kaddor Voir le message
    Ensuite c’est au niveau de FSUIPC_Read qu’il y a une erreur : External: ACCES VIOLATION avec : access violation reading from address $FFFFFFFFFFFFFFFF.
    2e problème : ACCES VIOLATION c'est la tentative d'accéder à une adresse non initialisée, non "attribuée" au programme (sigsegv en C).
    Pareil, donne la ligne et son contexte.
    Et n'oublie pas de mettre les bouts de code entre les balises CODE et /CODE (symbole # au bout de la 2e ligne de l'éditeur des posts du forum).



    Citation Envoyé par Guesset Voir le message
    ... ne fonctionne à peu près correctement que sur un bitmap que l'on vient de créer.
    Je ne comprends pas : en lecture il fonctionne très bien, il faut juste prendre garde à bien calculer la longueur des lignes et le format des pixels, toutes choses qui doivent se retrouver en Delphi (à moins que les dernières versions ne fassent le taf ? Me suis arrêté à D7) et adapter les boucles et le padding des lignes en conséquence.
    Toute une histoire mais il n'y a pas photo question speed entre scanline et la classique boucle qui passe par l'accès aux pixels un par un :
    Citation Envoyé par enbarcadero
    On average my test application shows that using "ScanLine" property for bitmap access is approximately 30 times faster then using "Pixels". That's really more than I was expecting...
    https://community.embarcadero.com/bl...property-39051

    Citation Envoyé par Guesset Voir le message
    à la moindre modification de taille ou de format pixel c'est dans les choux.
    Bah, àmha ça doit être le même cirque avec les fichiers son : il faut toujours tout adapter, c'est comme ça.

    Citation Envoyé par Guesset Voir le message
    "Demain on roule à gauche et, si ça se passe bien, dans 15 jours on fait la même chose pour les camions".



  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Bonsoir,

    je ne comprends rien à ce que tu racontes, on dirait que tu utilises CreateFileMapping à l'envers...

    Tiens, regarde ce que j'ai trouvé dans ce post :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        FFileMap := CreateFileMapping(FFileHandle, // handle to file to map
          nil, // optional security attributes
          PAGE_READWRITE, // protection for mapping object
          0, // high-order 32 bits of object size
          2*1024, // low-order 32 bits of object size
          0); //
    Regarde bien la première ligne, surtout le commentaire, et compare avec ce que tu fais.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    informaticien
    Inscrit en
    Février 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Février 2004
    Messages : 7
    Par défaut
    Bonsoir,
    Je n'invente rien. Le fichier FPCuser que j'utilise est celui fourni dans le sdk
    La partie en commentaire, c'est moi qui l'ai mise en commentaire car à la compilation il y a toujours zéro en résultat pour le handle et il affiche une erreur. J'ai changé le premier paramètre après avoir trouvé un exemple. Ce changement permet d'avoir une valeur de handle et d'aller plus loin dans le programme
    mais il y a l'erreur acces violation. Es ce lié à mon changement de paramètre, incapable de le dire
    bonne soirée et merci

  9. #9
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 659
    Par défaut Mauvaise prise en main ?
    Bonjour,

    Est-ce que nous ne sommes pas dans le cas où un passage en 64 bit demande un handle en 64 bits ? A priori, j'essaierais avec -1 ou INVALID_HANDLE_VALUE. La doc MS est assez floue car en 64 bits elle parle de handle sous 8, 16, 32 et 64 bits (ce dernier absent des systèmes 32 bits).

    On remarque que le code est assez ancien comme en témoigne les multiples Result := false; Exit; au lieu de Exit(false);. Il aurait besoin d'être revu d'autant que l'usage de pointeurs non typés alors qu'ils sont utilisé comme pointeur de byte n'est pas optimal.

    Salutations

  10. #10
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Bonjour,

    Citation Envoyé par kaddor Voir le message
    La partie en commentaire, c'est moi qui l'ai mise en commentaire car à la compilation il y a toujours zéro en résultat pour le handle et il affiche une erreur.
    C'est normal, tu ne fais pas ce qu'il faut : je t'ai conseillé de lire attentivement le commentaire de la première ligne que j'ai postée, et de le comprendre, ça va de soi.

    Citation Envoyé par kaddor Voir le message
    J'ai changé le premier paramètre après avoir trouvé un exemple.
    Fais voir cet exemple.

    Citation Envoyé par Guesset Voir le message
    A priori, j'essaierais avec -1 ou INVALID_HANDLE_VALUE.
    Tu vas nous l'enduire d'erreur :
    Citation Envoyé par Jipété Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        FFileMap := CreateFileMapping(FFileHandle, // handle to file to map
    (Pas là pendant un paquet d'heures...)

  11. #11
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 659
    Par défaut Fonction à tout faire
    Bonjour,

    Si j'ai bien compris l'usage, un hanle valide sert à mapper un fichier existant vers la mémoire alors que l'usage de INVALID_HANDLE_VALUE indique qu'on veut juste réserver de l'espace en mémoire paginée.

    Le nom en dernier argument n'est pas un nom de fichier mais d'objet. Contrairement à ce que le libellé de la fonction laisse penser, si ce nom d'objet correspond à un objet déjà mappé, il n'y a pas création mais accès : c'est un moyen de faire communiquer des processus d'espaces mémoires disjoints (les objets nommés sont uniques).

    Salutations

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    informaticien
    Inscrit en
    Février 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Février 2004
    Messages : 7
    Par défaut suite ( mais pas fin)
    Bonjour,
    J'ai bien regardé le lien du post de ton message. Après plusieurs lecture pour comprendre, il semblerait qu'en freepascal/lazarus, il faille créer le fichier avant la création de l'espace de mapping. Ce qui n'est pas nécessaire en delphi et c.
    J'ai modifié mon fichier en prenant exemple sur le post, parfait plus d'erreur à la création createfilemapping, j'obtiens un n° de handle.
    Je vais poursuivre mes recherches pour résoudre le problème d' access violation. Il faut que je trouve précisément la fonction qui pose problème
    Je reviendrai poster mes conclusions ( bonnes ou mauvaises) pour clore cette discussion
    Encore merci
    Kaddor

  13. #13
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 659
    Par défaut Oui mais...
    Bonjour,

    Je crois que Jipété a raison quant à l'usage de cette fonction pour mapper (projeter ?) un fichier en mémoire mais je ne pense pas que nous soyons dans ce cas de figure.

    Je suppose que le but est de faire partager un espace mémoire commun entre FS et le programme appelant. Cet espace étant géré par FS.

    Le programme appelant doit se contenter de demander un espace ayant le même nom d'objet que celui utilisé par FS. Windows considère qu'un nom ne peut désigner qu'un seul objet. Il s'ensuit alors que cet objet mappé en mémoire devient le moyen d'échange direct entre les deux applications. Dans ce cas, comme il n'y a pas de fichier à projeter on utilise un Handle invalide particulier. Il est vraisemblable que celui-ci a changé en passant en 64 bits d'où mes propositions : -1 = $FFFFFF... ou le symbole INVALID_HANDLE_VALUE.

    A tester

    Salutations

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/09/2012, 19h49
  2. Recherche d'informations pour optimiser une requête
    Par zaza78 dans le forum Administration
    Réponses: 2
    Dernier message: 20/08/2010, 15h00
  3. [FTP débutant]recherche serveur ftp pour connexion
    Par coax81 dans le forum Développement
    Réponses: 3
    Dernier message: 06/09/2007, 15h06
  4. [VB]Boite noire pour Flight Simulator
    Par Azkato dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/03/2006, 18h19

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