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 :

Comment communiquer entre une application windev et un programme C ou C++


Sujet :

WinDev

  1. #41
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Bonjour,

    Mauvaise nouvelle
    j'ai l'impression que l'on ne va pas pouvoir utiliser dotnet . Mais comme je ne suis pas expert en dotnet il y a peut être espoir. Voici le problème :
    Finalement je suis arrivé à ce code pour le début du simpleRead :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    monscriptNode est un "OpenNI.ScriptNode" dynamique
    moncontexte est un "OpenNI.Context" dynamique
    monDepthgenerator est un "OpenNI.DepthGenerator" dynamique
    // la config est mise dans "mes documents" 
    ConfigExemple est une chaîne = ComplèteRep(SysRep(srMesDocuments))+"SamplesConfig.xml"
    QUAND EXCEPTION DANS
    moncontexte =  "OpenNI.Context"::CreateFromXmlFile(ConfigExemple,monscriptNode)
    monDepthgenerator = moncontexte:FindExistingNode("OpenNI.NodeType".Depth)
    FAIRE
    Erreur(ExceptionInfo())
    FIN
    Quand j'exécute ce code j'ai une exception mais pas d'infos sur l'exception.
    Si je met un fichier de config qui n'existe pas toujours pas d'infos sur l'exception. Par contre si je fais cela :
    [code]
    Tu déclares une variable monscriptNode de type "OpenNI.ScriptNode" dynamique mais nulle part on ne crée une instance, ne serais ce pas là le problème ?
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  2. #42
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par DelphiManiac Voir le message
    Tu déclares une variable monscriptNode de type "OpenNI.ScriptNode" dynamique mais nulle part on ne crée une instance, ne serais ce pas là le problème ?
    Bonjours DelphiManiac,

    tout à fait, le problème c'est que j'ai pas trouvé comment créer une instance pour cette variable, d’ailleurs dans le code C# d'ou vient l'exemple il n'y a pas d'instance sur cette variable, voici le code que je veux le traduire sur windev:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using OpenNI;
     
    namespace SimpleRead.net
    {
    	class Program
    	{
    		static void Run()
    		{
                string SAMPLE_XML_FILE = @"../../../Data/SamplesConfig.xml";
     
    			ScriptNode scriptNode;
    			Context context = Context.CreateFromXmlFile(SAMPLE_XML_FILE, out scriptNode);
     
    			DepthGenerator depth = context.FindExistingNode(NodeType.Depth) as DepthGenerator;
     
    			if (depth == null)
    			{
    				Console.WriteLine("Sample must have a depth generator!");
    				return;
    			}
     
    			MapOutputMode mapMode = depth.MapOutputMode;
     
    			DepthMetaData depthMD = new DepthMetaData();
     
    			Console.WriteLine("Press any key to stop.....");
     
    			while (!Console.KeyAvailable)
    			{
    				context.WaitOneUpdateAll(depth);
     
    				depth.GetMetaData(depthMD);
     
    				Console.WriteLine("Frame {0} Middle point is: {1}.", depthMD.FrameID, depthMD[(int)mapMode.XRes/2, (int)mapMode.YRes/2]);
    			}
    		}
     
    		static void Main(string[] args)
    		{
    			try
    			{
    				Run();
    			}
    			catch (System.Exception ex)
    			{
    				Console.WriteLine("Error: {0}", ex.Message);
    			}
    		}
    	}
    }
    espérant que je résous ce problème sinon je dois laisser tomber cette méthode et me concentrer sur mon ancien code en C et faire une dll qui va chercher les valeurs des paramètres de ce code en C et les transmettre à windev en appelant des fonction de la DLL depuis windev

  3. #43
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 961
    Points : 9 305
    Points
    9 305
    Par défaut
    dans CreateFromXmlFile(ConfigExemple,monscriptNode)
    le 2ème paramètre est un paramètre out c'est à dire une référence et je crois que c'est la fonction CreateFromXmlFile qui initialise le monscriptNode
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #44
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    dans CreateFromXmlFile(ConfigExemple,monscriptNode)
    le 2ème paramètre est un paramètre out c'est à dire une référence et je crois que c'est la fonction CreateFromXmlFile qui initialise le monscriptNode
    est ce que tu pense que si on remplace la fonction CreateFromXMLFile() par la fonction RunXmlScript (LOCAL xml est un(e) chaîne) de la Classe Context
    peut être je me trompe

  5. #45
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    dans CreateFromXmlFile(ConfigExemple,monscriptNode)
    le 2ème paramètre est un paramètre out c'est à dire une référence et je crois que c'est la fonction CreateFromXmlFile qui initialise le monscriptNode
    J'ai commencé à faire un petit programme DLL en se basant sur le code du programme SampleRead.cpp mais je ne sais pas comment faire les fonctions qui exportent les valeurs, peux-tu m’éclaircir dessus stp?

  6. #46
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    dans CreateFromXmlFile(ConfigExemple,monscriptNode)
    le 2ème paramètre est un paramètre out c'est à dire une référence et je crois que c'est la fonction CreateFromXmlFile qui initialise le monscriptNode
    Jurassic pork à raison, donc ma remarque n'avait pas lieu d'être.

    Désolé, j'ai juste poster en réponse au message sans avoir lu la doc de l'api.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  7. #47
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 961
    Points : 9 305
    Points
    9 305
    Par défaut
    voici un exemple de programme windev qui va chercher un tableau de réels dans une dll en C

    côté Windev :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    hInst est un entier système
    res est un entier
    tabReels est un tableau de 100 réels
    hInst = ChargeDLL("f:\testrenvoi.dll")
     
    SI hInst = 0 ALORS
    	Erreur("Erreur lors du chargement : " + ErreurInfo())
    SINON
    res = AppelDLL32("testrenvoi","renvoivaleurs",100,&tabReels)
    FIN
    côté C :
    1 - programme main.cpp
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include "main.h"
     
    // a sample exported function
    int DLL_EXPORT renvoivaleurs(int nNum, double *tabReels)
    {
    	for (int i = 0; i < nNum; ++i)
    	{
          tabReels[i] = i + 0.5;
    	}
     
    	return 0;
     
    }
     
     
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
        switch (fdwReason)
        {
            case DLL_PROCESS_ATTACH:
                // attach to process
                // return FALSE to fail DLL load
                break;
     
            case DLL_PROCESS_DETACH:
                // detach from process
                break;
     
            case DLL_THREAD_ATTACH:
                // attach to thread
                break;
     
            case DLL_THREAD_DETACH:
                // detach from thread
                break;
        }
        return TRUE; // succesful
    }
    2 - main.h
    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
    #ifndef __MAIN_H__
    #define __MAIN_H__
     
    #include <windows.h>
     
    /*  To use this exported function of dll, include this header
     *  in your project.
     */
     
    #ifdef BUILD_DLL
        #define DLL_EXPORT __declspec(dllexport)
    #else
        #define DLL_EXPORT __declspec(dllimport)
    #endif
     
     
    #ifdef __cplusplus
    extern "C"
    {
    #endif
     
    int DLL_EXPORT renvoivaleurs(int nNum, double *tabReels);
     
    #ifdef __cplusplus
    }
    #endif
     
    #endif // __MAIN_H__
    en utilisant code:blocks

    Ami calmant J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #48
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    voici un exemple de programme windev qui va chercher un tableau de réels dans une dll en C

    côté Windev :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    hInst est un entier système
    res est un entier
    tabReels est un tableau de 100 réels
    hInst = ChargeDLL("f:\testrenvoi.dll")
     
    SI hInst = 0 ALORS
    	Erreur("Erreur lors du chargement : " + ErreurInfo())
    SINON
    res = AppelDLL32("testrenvoi","renvoivaleurs",100,&tabReels)
    FIN
    côté C :
    1 - programme main.cpp
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include "main.h"
     
    // a sample exported function
    int DLL_EXPORT renvoivaleurs(int nNum, double *tabReels)
    {
    	for (int i = 0; i < nNum; ++i)
    	{
          tabReels[i] = i + 0.5;
    	}
     
    	return 0;
     
    }
     
     
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
        switch (fdwReason)
        {
            case DLL_PROCESS_ATTACH:
                // attach to process
                // return FALSE to fail DLL load
                break;
     
            case DLL_PROCESS_DETACH:
                // detach from process
                break;
     
            case DLL_THREAD_ATTACH:
                // attach to thread
                break;
     
            case DLL_THREAD_DETACH:
                // detach from thread
                break;
        }
        return TRUE; // succesful
    }
    2 - main.h
    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
    #ifndef __MAIN_H__
    #define __MAIN_H__
     
    #include <windows.h>
     
    /*  To use this exported function of dll, include this header
     *  in your project.
     */
     
    #ifdef BUILD_DLL
        #define DLL_EXPORT __declspec(dllexport)
    #else
        #define DLL_EXPORT __declspec(dllimport)
    #endif
     
     
    #ifdef __cplusplus
    extern "C"
    {
    #endif
     
    int DLL_EXPORT renvoivaleurs(int nNum, double *tabReels);
     
    #ifdef __cplusplus
    }
    #endif
     
    #endif // __MAIN_H__
    en utilisant code:blocks

    Ami calmant J.P
    Merci JP, je vais tester, mais le problème je pense ça va être le même vu qu'on cas de bug on ne sera pas ou aller chercher ou bien coté windev ou coté dll donc capteur.
    C'est pour ça que je penche plus vers ta méthode de tout programmer en Windev en utilisant la dotnet, si on arrive à contourner le problème de la configuration par xml.
    comme je l'ai déjà signaler dans un message précédent, dans le sample SimpleViewer.net ils ont pas utiliser la configuration par fichier xml

  9. #49
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Magnifique JP,
    ça maaaaaaaaaaaaaaaaarche enfin, par contre il ne faut pas mettre des boucles while dans la fonction qu'on appel dans la dll (avec la condition de sortie qui se trouve dans l'application windev)sinon c'est l'application windev qui reste bloquée, il faut plutôt mettre l'appel de la fonction de la dll en boucle dans windev et bien entendu laisser la fonction de la dll sans la boucle, je ne sais pas si j'ai bien expliqué .
    si tu as une autre astuce je suis preneur JP

  10. #50
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 961
    Points : 9 305
    Points
    9 305
    Par défaut
    dans windev tu lances une procédure qui appelle ta dll par un threadexecute et tu attends la fin d'execution du thread en bouclant sur le test en état en cours (threadetat) de ton thread dans cette boucle tu mets un multitache(-10) pour que ça bloque pas.
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #51
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    En fait la méthode fonctionne mais ce que je n'est pas très bien compris c'est que avec l'exemple que tu m'as passé il a fonctionne très bien mais quand j'ai voulu intégrer les fonctions du capteur ( la DLL c'est bien compilée) j'ai fais une fonction extern ou j'ai intégré le main (sans la boucle while) du code SampleRead.cpp voici le code de ma dll:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    int DLL_EXPORT; int renvoivaleurs(int X, int Y,float Z)
    {
    	XnStatus nRetVal = XN_STATUS_OK;
     
    	Context context;
    	ScriptNode scriptNode;
    	EnumerationErrors errors;
     
    	const char *fn = NULL;
    	if	(fileExists(SAMPLE_XML_PATH)) fn = SAMPLE_XML_PATH;
    	else if (fileExists(SAMPLE_XML_PATH_LOCAL)) fn = SAMPLE_XML_PATH_LOCAL;
    	else {
    		printf("Could not find '%s' nor '%s'. Aborting.\n" , SAMPLE_XML_PATH, SAMPLE_XML_PATH_LOCAL);
    		return XN_STATUS_ERROR;
    	}
    	printf("Reading config from: '%s'\n", fn);
    	nRetVal = context.InitFromXmlFile(fn, scriptNode, &errors);
     
    	if (nRetVal == XN_STATUS_NO_NODE_PRESENT)
    	{
    		XnChar strError[1024];
    		errors.ToString(strError, 1024);
    		printf("%s\n", strError);
    		return (nRetVal);
    	}
    	else if (nRetVal != XN_STATUS_OK)
    	{
    		printf("Open failed: %s\n", xnGetStatusString(nRetVal));
    		return (nRetVal);
    	}
     
    	DepthGenerator depth;
    	nRetVal = context.FindExistingNode(XN_NODE_TYPE_DEPTH, depth);
    	CHECK_RC(nRetVal, "Find depth generator");
     
    	XnFPSData xnFPS;
    	nRetVal = xnFPSInit(&xnFPS, 180);
    	CHECK_RC(nRetVal, "FPS Init");
     
    	DepthMetaData depthMD;
     
    	//while (!xnOSWasKeyboardHit())
    	//{
    		nRetVal = context.WaitOneUpdateAll(depth);
    		if (nRetVal != XN_STATUS_OK)
    		{
    			printf("UpdateData failed: %s\n", xnGetStatusString(nRetVal));
    			//continue;
    		}
    		xnFPSMarkFrame(&xnFPS);
    		depth.GetMetaData(depthMD);
    		const XnDepthPixel* pDepthMap = depthMD.Data();
    		printf("Frame %d Middle point is: %u. FPS: %f\n", depthMD.FrameID(), depthMD(depthMD.XRes() / 2, depthMD.YRes() / 2), xnFPSCalc(&xnFPS));
    	//}
     
    	//depth.Release();
    	//scriptNode.Release();
    	//context.Release();
     
    	Z = depthMD(X,Y);
    	return 0;
    }
    et voici le code dans windev:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    hInst est un entier système
    res est un entier
    Z est un réel
    hInst = ChargeDLL("C:\Users\MIRTech\Documents\OpenIN\Samples\testDLL\Debug\testDLL.dll")
     
    SI hInst = 0 ALORS
    	Erreur("Erreur lors du chargement : " + ErreurInfo())
    SINON
    	res = AppelDLL32("testDLL","renvoivaleurs",300,200,Z)
    FIN
    	Trace(Z)
    Alors ce que je cherche à afficher c'est la valeur de la profondeur du pixel qui a la position X=300, Y=200 qui se trouve dans la fonction extern de la DLL en utilisant la fonction Z = depthMD(X,Y);

    Mais rien ne vaaaaa je vois le capteur s'allumé pendant le temps de l'exécution de la DLL mais vu que la fonction exter n'a pas la boucle alors la DLL s'arrete de s'exécuter et la fonction trace m'affiche la valeur Z = 0

  12. #52
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 961
    Points : 9 305
    Points
    9 305
    Par défaut
    bonjour,
    sais-tu à quoi sert cette boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (!xnOSWasKeyboardHit())
    une attente d'appui sur touche ?


    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #53
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 961
    Points : 9 305
    Points
    9 305
    Par défaut
    bonjour,
    j'ai vu que tu utilisais un float du côté C.
    Voici la correspondance windev :
    float 4 octets réel sur 4 octets
    double 8 octets réel [sur 8 octets]

    donc du côté windev il faut que tu mettes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Z est un réel sur 4 octets
    Ami calmant, J.P ;-)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  14. #54
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    bonjour,
    j'ai vu que tu utilisais un float du côté C.
    Voici la correspondance windev :
    float 4 octets réel sur 4 octets
    double 8 octets réel [sur 8 octets]

    donc du côté windev il faut que tu mettes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Z est un réel sur 4 octets
    Ami calmant, J.P ;-)
    Bonjour JP,
    je suis désolé que j'ai répondu que maintenant à ton message, je te remercie pour ton aide, finalement je pense que

    • Ni la méthode de DLL parce que, j'ai remarqué que chaque fois je dois prendre un paramètre du code DLL, le capteur doit se rallumer et se configurer (5 secondes), or avec la méthode d'écrire dans un fichier texte les paramètres et les valeurs que j'ai besoin, depuis mon programme .exe en C et après lire ce fichier texte depuis mon application WLangage


    Par contre j'ai un autre soucis c'est que dans ce projet, j’utilise deux PC connectés au même réseau WiFi, le premier est connecté à une carte à DSP par son port COM série RS232 et le deuxième PC dois écrire et lire ce port COM. est ce que tu pense que c'est possible , si oui peux-tu m'éclaircir la-dessus?

  15. #55
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    bonjour,
    sais-tu à quoi sert cette boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (!xnOSWasKeyboardHit())
    une attente d'appui sur touche ?


    Ami calmant, J.P
    Bonjour JP
    excuse-moi je viens de voir que maintenant ta question:
    oui effectivement, la condition de la sortie de la boucle est la touche esc enfoncée, si je garde cette boucle j'ai remarqué que la DLL me bloque mon application windev. parce que si j'arrive à exécuter cette DLL dans un thread dans mon application windev est ce q

  16. #56
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    bonjour,
    sais-tu à quoi sert cette boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (!xnOSWasKeyboardHit())
    une attente d'appui sur touche ?


    Ami calmant, J.P
    Bonjour JP
    excuse-moi je viens de voir que maintenant ta question:
    oui effectivement, la condition de la sortie de la boucle est la touche esc enfoncée, si je garde cette boucle j'ai remarqué que la DLL me bloque mon application windev. parce que si j'arrive à exécuter cette DLL dans un thread dans mon application windev est ce que j'aurais toujours le blocage de mon application?

  17. #57
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Par contre j'ai un autre soucis c'est que dans ce projet, j’utilise deux PC connectés au même réseau WiFi, le premier est connecté à une carte à DSP par son port COM série RS232 et le deuxième PC dois écrire et lire ce port COM. est ce que tu pense que c'est possible , si oui peux-tu m'éclaircir la-dessus?
    Si j'ai bien compris, tu veux utiliser le port com d'un pc à partir d'un autre pc au travers d'un réseau.

    Si oui, il existe des outils permettant de réaliser cela, par exemple : http://www.fabulatech.com/network-serial-port-kit.html

    Par contre il faut savoir que ces outils ne te permettent pas l'ouverture du port série par les 2 pcs en simultanée.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  18. #58
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par DelphiManiac Voir le message
    Si j'ai bien compris, tu veux utiliser le port com d'un pc à partir d'un autre pc au travers d'un réseau.

    Si oui, il existe des outils permettant de réaliser cela, par exemple : http://www.fabulatech.com/network-serial-port-kit.html

    Par contre il faut savoir que ces outils ne te permettent pas l'ouverture du port série par les 2 pcs en simultanée.
    Bonjour DelphiManiac,
    merci beaucoup pour ta réponse rapide,
    justement ce que je veux faire c'est que il y a le premier PC qui gère la communication du port COM (qui lui appartient), la communication du premier PC avec son port COM, ne me pose pas un problème en WLangage, mais je veux aussi utiliser le deuxième PC (Connecté au réseau) envois des sockets au premier pour qu'il écrit et lire sur le port COM, je suppose que c'est possible de faire ça en WLangage non?

  19. #59
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Techniquement oui c'est possible sans soucis, mais je ferais plutôt un programme indépendant qui gère la communication avec le port série et qui est accessible aux 2 autres programmes par socket. Donc en gros une application serveur qui communique avec le port série et attend les connexions sur un socket. Les clients se connectant sur le serveur en socket classique.

    Mais ^^ une connexion série, ça a toujours été une communication de 1 <-> 1, comment vas tu gérer les données qui arrivent sur le port série. Comment sauras tu que ces données sont destinées à un programme sur le 1er pc ou au même programme sur le 2ième pc.

    La question se pose surtout dans le cas ou un dialogue est établie entre l'application et le périphérique série. Je demande <quelque chose> au périphérique série et j'attend une réponse.

    Après je ne connais pas le dialogue qu'il est possible d'établir avec ce périphérique particulier, il faut donc réfléchir autour de cette problématique avant de dire que c'est possible.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  20. #60
    Membre à l'essai
    Homme Profil pro
    On a pas fini d'apprendre
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : On a pas fini d'apprendre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par DelphiManiac Voir le message
    Techniquement oui c'est possible sans soucis, mais je ferais plutôt un programme indépendant qui gère la communication avec le port série et qui est accessible aux 2 autres programmes par socket. Donc en gros une application serveur qui communique avec le port série et attend les connexions sur un socket. Les clients se connectant sur le serveur en socket classique.

    Mais ^^ une connexion série, ça a toujours été une communication de 1 <-> 1, comment vas tu gérer les données qui arrivent sur le port série. Comment sauras tu que ces données sont destinées à un programme sur le 1er pc ou au même programme sur le 2ième pc.

    La question se pose surtout dans le cas ou un dialogue est établie entre l'application et le périphérique série. Je demande <quelque chose> au périphérique série et j'attend une réponse.

    Après je ne connais pas le dialogue qu'il est possible d'établir avec ce périphérique particulier, il faut donc réfléchir autour de cette problématique avant de dire que c'est possible.
    Ah oui j'ai compris ce que tu veux dire, du coup je me rends compte que je me suis mal exprimé dans le message précédent :

    • Le PC n°1 a le port COM qui est connecté à la carte avec laquelle je communique depuis l'application windev Appli1 qui se trouve sur le même PC n°1 et qui est connecté au réseau.


    • Le PC n°2 est connecté au réseaux WiFi, il a une application Windev Appli2 qui envois et lit des sockets au PC n° 1 (Commandes ) pour que Appli1 écrit et lit sur le port COM


    Donc c'est toujours l'Appli 1 qui communique avec le port COM . L'Appli2 ne communique pas avec le port COM du PC n°1 directement.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/06/2011, 18h55
  2. Réponses: 4
    Dernier message: 27/05/2009, 16h00
  3. Réponses: 3
    Dernier message: 02/06/2008, 16h13
  4. Réponses: 2
    Dernier message: 11/07/2007, 23h24
  5. Réponses: 1
    Dernier message: 26/03/2007, 12h58

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