Page 1 sur 1

[RESOLU] un ptit souci de pointeur, sous visual c++

Posté : 13 mai 2006 16:55
par Naveed
Bonjour

j'ai un projet sans erreur de compil mais il ne fait pas ce que je veux parce qu'il n'a qu'une ligne que je n'arirve pas à définir correctement. je ne sias pas comment déclarer le pointeur ou le mettre en place.

c'est cette fonction

Code : Tout sélectionner

HDDEDATA DdeClientTransaction(  // aide msdn   

    LPBYTE pData, // là je bloque
    DWORD cbData,
    HCONV hConv,
    HSZ hszItem,
    UINT wFmt,
    UINT wType,
    DWORD dwTimeout,
    LPDWORD pdwResult
);
j'ai une case IDC_EDIT1 avec une valeur "m_Val" de type CString.

je veux envoyer une donnée pour écriture sur un serveur dans une case de valeur "Value" de type CString.

dans mon programme client, j'ai mis donc le code suivant correspondant au bouton (tout à la fin)

Code : Tout sélectionner

  Item=DdeCreateStringHandle
            (
            pidInst,
            m_Item,
            CP_WINANSI
            );

        DdeClientTransaction
            (
            (LPBYTE)(LPCTSTR)ItemValue,  // bloqué
            strlen(ItemValue)+1,
            hconv,
            Item,
            (UINT) CF_TEXT,
            (UINT) XTYP_POKE,
            (DWORD) 1000,
            NULL
            );
        DdeFreeStringHandle(pidInst, Item);
et j'ai mis tout en haut en globale dans mon programme
char ItemValue[50]="m_Val";

==> aucune erreur de compil, dans mon projet je reçois des valeur mais ne peux en envoyer, pourriez vous me dire comment je pourrai envoyer la valeur de la case sur le serveur, cad comment faire que la valeur soit pointée par un pointeur ItemValue

je me suis aidé de cette page pour faire mon programme :
http://support.microsoft.com/default.as ... r%3B279721
je n'utilise pas d'excel, c 2 exécutables. et c des MFC sous visual c++

voilà, vous remercie d'avance si vous arrivez à me filer un coup de main :D

----------------------------------------------

pour information, le haut du code c'est

Code : Tout sélectionner

// client : m_Val, m_Double, m_Triple et serveur : Value, Double, Triple
// nav_clientDlg.cpp : implementation file
//

#include "stdafx.h"
#include "nav_client.h"
#include "nav_clientDlg.h"
#include <ddeml.h> // rajout

#include <time.h>
#include <windows.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


//déclaration de la fonction callback
HDDEDATA CALLBACK DdeCallback(
  UINT uType,     // transaction type
  UINT uFmt,      // clipboard data format
  HCONV hconv,    // handle to the conversation
  HSZ hsz1,       // handle to a string
  HSZ hsz2,       // handle to a string
  HDDEDATA hdata, // handle to a global memory object
  DWORD dwData1,  // transaction-specific data
  DWORD dwData2   // transaction-specific data
 
);
 


DWORD pidInst;

PFNCALLBACK pfnCallback;

HSZ Item,Topic,Service;
HDDEDATA hData;
HCONV hconv;

DWORD size;
PSTR psz;


char ItemValue[50]="m_Val";  //////////////// m_Val?

Posté : 13 mai 2006 17:14
par GregLand
Moi ch'suis désolé, ch'peux pas t'aider... Image
J'aime pô ça le C++... Et je suppose que tu as pas mal cherché sur Google...

Posté : 13 mai 2006 18:03
par Sebome
:o je suis totalment pomé dans ton code... :oops:
Il y 'a de l'interface graphique ladedans?

Sinon je le seul truc que je peux dire c'est pour un pointeur :

type * nom_du_pointeur;


Je dis ca comme je vois pas détoile mais bon vu ce que tu fais ton niveau est bien supérieur au mien, je ne dois pas t'etre d'une grande aide...

Posté : 13 mai 2006 18:26
par Naveed
j'ai l'équivalent en vb, sauf que là là j'ai une valeur dans une case mais j'arrive pas à la récupérer, le pointeur doit désigner la valeur
en plus mon code compile avec les * ou & donc meme en tessayant au pif j'ai pas réussi lol

c le seul truc à trouver et j'aurai tt fini lolz

++

Posté : 14 mai 2006 00:24
par Naveed
j'ai trouvé qqch :
char* ItemValue=(char*)LPCTSTR(m_Val);

le souci est qu'il prend uniquement une valeur prédéfinie
m_Val = _T("5");
DDX_Text(pDX, IDC_EDIT1, m_Val);
ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
==> au démarrage il y a une case préremplie avec une valeur de 5
moi je démarre le programme je met une valeur de 7 ou 8 ou 2 ou 10, c moi qui choisit et je veux l'envoyer or mon programme ne prend que la valeur prédéfinie.
m_Val est de type class CString

en fait je chercher à récupérer cette valeur modifiée dans IDC_EDIT1 (une case genre Edit Box)

j'iamerai votre aide sur la mise en place des fonctions suivante qui me seront utiles je pense.
hItemValue = GetDlgItem(hWnd, IDC_EDIT1);
et/ou un
GetWindowText(hItemValue,pDDE.ItemValue,500);

ou si vous savez comment faire pour récupérer cette valeur modifiée dans IDC_EDIT1

Merci

lol j'ai avancé d'un pas :D

Posté : 14 mai 2006 02:37
par Naveed
j'ai réussi à trouver une astuce.
probleme résolu.

Code : Tout sélectionner

 UpdateData();
	char* ItemValue=(char*)LPCTSTR(m_Val); // ça marche avec la valeur par défaut de m_Val
	                                       // donc je met à jour tout cela
 UpdateData(FALSE);
@+

Posté : 14 mai 2006 03:33
par GregLand
Content que le forum ait pu t'aider...
Image
. Image

Posté : 14 mai 2006 03:57
par Naveed
tant pis, on sait jamais si un bon passe par là :D :D

le principale c que j'ai réussi, surtout sans aide d'aucun forum (mon sujet devait intéresser personne ou alors trop complexe pour avoir une vrai réponse :P lolz)

en tt cas je déteste la prog, ça c sur, c trop galère lolz
je sais meme pas comment tu fais toi avec tes logiciels.

++

Pour ceux intéressé pour programmer graphiquement sous windows, c'est fichier/nouvo projet/MFCappwizard(exe) et choisir "dialog based"
ensuite vous dessinez un bouton, double cliq puis ok alors vous pouvez écrire entre les accolade votre fonction qui sera exécutée lors d'un double cliq.
et là le sport peut commencer
:P