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

C++ Discussion :

Problème de retour d'interface DCOM


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut Problème de retour d'interface DCOM
    Bonjour,

    J'ai une application distribué qui permet de passer une structure via d'un PC à un autre via DCOM.

    Ma structure est une interface DCOM composé d'autre interface, elles-mêmes composé d'interfaces et etc... jusqu'à arriver à des types simples.

    En gros l'application cliente envoie la structure vers le serveur. Le serveur la copie et traite les données. Enfin, le client récupère la structure.

    Mon problème est que j'arrive à envoyer le structure, mais je la récupère à moitié.

    Pourtant, je fais la même chose coté client et serveur.

    Code client: création de l'interface à envoyer.
    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
    64
    65
    66
     
                    TCOMITMatrixIntCOM matrice = CoTMatrixIntCOM::Create();
     
    		matrice.set_nCols(nCols); 
    		matrice.set_nRows(nRows);
    		matrice.set_roiTop(roiTop);
    		matrice.set_roiLeft(roiLeft);
    		matrice.set_roiRight(roiRight);
    		matrice.set_roiBottom(roiBottom);
     
    		LPSAFEARRAY lpsa;
    		lpsa = SafeArrayCreateVector(sizeof(int),0,data.size());
    		long Valeur,Position;
    		for(i=0; i<data.size(); i++){
    			Position = i;
    			Valeur = data[i];
    			SafeArrayPutElement(lpsa, &Position, &Valeur);
    		} 
    		matrice.set_data(lpsa);
    		SafeArrayDestroy(lpsa);
     
     
    			// iRoi
    		TCOMITVectorAnsiStringCOM iRoi = CoTVectorAnsiStringCOM::Create();
    		for(i=0; i<roiList.size(); i++)
    		{
    			iRoi.set_element(i,roiList[i].c_str());
                    }
     
     
    			// currentRegion
    		TCOMITRegionCOM cReg = CoTRegionCOM::Create();
    		cReg.list = iRoi;
     
     
    			// list (regions)
    		TCOMITVectorAnsiStringCOM * iReg;
    		TCOMITRegionCOM * reg;
    		TCOMITVectorTRegionCOM listRegion = CoTVectorTRegionCOM::Create(); 
    		for(i=0; i<regionList.size(); i++)
    		{
    			reg = new TCOMITRegionCOM;
    			*reg = CoTRegionCOM::Create(); 
    			iReg = new TCOMITVectorAnsiStringCOM;
    			*iReg = CoTVectorAnsiStringCOM::Create();
     
    			for(j=0; j<regionList[i].size(); j++)
    			{
    				iReg->set_element(j,regionList[i][j].c_str());
                            }
     
    			reg->set_list((TVectorAnsiStringCOM*)*iReg);	
    			listRegion.set_element(i,(TRegionCOM*)*reg);
    		}
     
     
    			// regions
    		TCOMITRegionsCOM regions = CoTRegionsCOM::Create();
    		regions.currentRegion = cReg;
    		regions.list = listRegion;
     
     
    			// Image
    		TCOMITImageDataCOM image = CoTImageDataCOM::Create();
    		image.iMatrix = matrice;
    		image.regions = regions;
    Code client: Envoi, traitement et retour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    		TCOMIObjetRunCOM objetDistant = CoObjetRunCOM::CreateRemote(L"10.167.20.154");
    		TImageDataCOM * imageResult;
     
    		reponse = objetDistant.set_image((TImageDataCOM*)image);
    		analyseReponse(reponse, "set_image");
    	   	if(SUCCEEDED(reponse)){
    			reponse = objetDistant.Run();
    			analyseReponse(reponse, "Run");
    			if(SUCCEEDED(reponse)){
    				reponse = objetDistant.get_image(&imageResult);
    				analyseReponse(reponse, "get_image");
    			}
    		}
    Code serveur: Création de l'interface pour le retour des données
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    STDMETHODIMP TObjetRunCOMImpl::get_image(TImageDataCOM** Value)
    {
      try
      {
    	int i,j;
    	HRESULT reponse;
     
     
    		// iMatrix
    	TCOMITMatrixIntCOM matrice = CoTMatrixIntCOM::Create();
     
    	matrice.set_nCols(nCols); 
    	matrice.set_nRows(nRows);
    	matrice.set_roiTop(roiTop);
    	matrice.set_roiLeft(roiLeft);
    	matrice.set_roiRight(roiRight);
    	matrice.set_roiBottom(roiBottom);
     
    	LPSAFEARRAY lpsa;
    	lpsa = SafeArrayCreateVector(sizeof(int),0,data.size());
    	long Valeur,Position;
    	for(i=0; i<data.size(); i++){
    		Position = i;
    		Valeur = data[i];
    		SafeArrayPutElement(lpsa, &Position, &Valeur);
    	} 
    	matrice.set_data(lpsa);
    	SafeArrayDestroy(lpsa);
     
     
    		// iRoi
    	TCOMITVectorAnsiStringCOM iRoi = CoTVectorAnsiStringCOM::Create();
    	for(i=0; i<roiList.size(); i++)
    		iRoi.set_element(i,roiList[i].c_str());
     
     
    		// currentRegion
    	TCOMITRegionCOM cReg = CoTRegionCOM::Create();
    	cReg.set_list((TVectorAnsiStringCOM*)iRoi);
     
     
    		// list (regions)
    	TCOMITVectorAnsiStringCOM * iReg;
    	TCOMITRegionCOM * reg;
    	TCOMITVectorTRegionCOM listRegion = CoTVectorTRegionCOM::Create(); 
    	for(i=0; i<regionList.size(); i++){
    		reg = new TCOMITRegionCOM;
    		*reg = CoTRegionCOM::Create(); 
    		iReg = new TCOMITVectorAnsiStringCOM;
    		*iReg = CoTVectorAnsiStringCOM::Create();
     
    		for(j=0; j<regionList[i].size(); j++)
    			iReg->set_element(j,regionList[i][j].c_str());
     
    		reg->set_list((TVectorAnsiStringCOM*)*iReg);	
    		listRegion.set_element(i,(TRegionCOM*)*reg);
    	}
     
     
    		// regions
    	TCOMITRegionsCOM regions = CoTRegionsCOM::Create();
    	regions.set_currentRegion((TRegionCOM*)cReg);
    	regions.set_list((TVectorTRegionCOM*)listRegion);
     
     
    		// Image  	
    	TCOMITImageDataCOM imageResult;
    	imageResult = CoTImageDataCOM::Create();
     
    	reponse = imageResult->set_regions((TRegionsCOM*)regions);
    	analyseReponse(reponse, "set_regions");
     
    	reponse = imageResult->set_iMatrix((TMatrixIntCOM*)matrice);
    	analyseReponse(reponse, "set_iMatrix");
     
    	*Value = imageResult;
      }
      catch(Exception &e)
      {
        return Error(e.Message.c_str(), IID_IObjetRunCOM);
      }
      return S_OK;
    };
    Au final, coté client, je récupère parfaitement ma matrice, mais pas mes régions.

    Alors qu'à l'envoi, je récupère tout. Et pourtant je fais la même chose!

    Une idée?
    Une question pour compléter le problème?

    Merci d'avance pour toute réponse.

  2. #2
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Je rajoute que côté serveur, dans la fonction get_image, l'interface regions est bien implanté dans l'interface image, mais disparait en arrivant côté client. Contrairement à la matrice qui est présente côté client et serveur.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Peux-tu montrer le code IDL ?
    C'est lui qui contient les informations pour le marshalling...

    PS: C'est du Borland ? Je n'y connais pas grand-chose aux wrappers COM de Borland...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Oui, c'est du Borland.

    Je commence à me demander si c'est pas Borland qui a du mal.

    Sinon, voici le code IDL.
    Je n'ai mis que les interfaces et pas les CoClass.

    ITImageDataCOM:
    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
    [
      uuid(405A19ED-F633-4B83-B81D-DDADC3CE38F7), 
      version(1.0), 
      helpstring("Dispatch interface for TImageDataCOM Object"), 
      dual, 
      oleautomation
    ]
     interface ITImageDataCOM: IDispatch
    {
      [
      propget, 
      id(0x000000C9)
      ]
      HRESULT _stdcall regions([out, retval] TRegionsCOM ** Value /*Warning: unable to validate structure name: */ );
      [
      propput, 
      id(0x000000C9)
      ]
      HRESULT _stdcall regions([in] TRegionsCOM * Value /*Warning: unable to validate structure name: */ );
      [
      propget, 
      id(0x000000CA)
      ]
      HRESULT _stdcall iMatrix([out, retval] TMatrixIntCOM ** Value /*Warning: unable to validate structure name: */ );
      [
      propput, 
      id(0x000000CA)
      ]
      HRESULT _stdcall iMatrix([in] TMatrixIntCOM * Value /*Warning: unable to validate structure name: */ );
    };
    ITMatrixIntCOM:
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    [
      uuid(81A4A6B8-4269-4DCB-B218-2ED02D1787D8), 
      version(1.0), 
      helpstring("Dispatch interface for TMatrixIntCOM Object"), 
      dual, 
      oleautomation
    ]
     interface ITMatrixIntCOM: IDispatch
    {
      [
      propget, 
      id(0x000000C9)
      ]
      HRESULT _stdcall roiTop([out, retval] int * Value );
      [
      propput, 
      id(0x000000C9)
      ]
      HRESULT _stdcall roiTop([in] int Value );
      [
      propget, 
      id(0x000000CA)
      ]
      HRESULT _stdcall roiLeft([out, retval] int * Value );
      [
      propput, 
      id(0x000000CA)
      ]
      HRESULT _stdcall roiLeft([in] int Value );
      [
      propget, 
      id(0x000000CB)
      ]
      HRESULT _stdcall roiRight([out, retval] int * Value );
      [
      propput, 
      id(0x000000CB)
      ]
      HRESULT _stdcall roiRight([in] int Value );
      [
      propget, 
      id(0x000000CC)
      ]
      HRESULT _stdcall roiBottom([out, retval] int * Value );
      [
      propput, 
      id(0x000000CC)
      ]
      HRESULT _stdcall roiBottom([in] int Value );
      [
      propget, 
      id(0x000000CD)
      ]
      HRESULT _stdcall nRows([out, retval] int * Value );
      [
      propput, 
      id(0x000000CD)
      ]
      HRESULT _stdcall nRows([in] int Value );
      [
      propget, 
      id(0x000000CE)
      ]
      HRESULT _stdcall nCols([out, retval] int * Value );
      [
      propput, 
      id(0x000000CE)
      ]
      HRESULT _stdcall nCols([in] int Value );
      [
      propget, 
      id(0x000000CF)
      ]
      HRESULT _stdcall data([out, retval] SAFEARRAY(int) * Value );
      [
      propput, 
      id(0x000000CF)
      ]
      HRESULT _stdcall data([in] SAFEARRAY(int) Value );
    };
    ITRegionCOM:
    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
    [
      uuid(BF6AB5E9-C522-400E-8B0E-A9891AB67839), 
      version(1.0), 
      helpstring("Dispatch interface for TRegionsCOM Object"), 
      dual, 
      oleautomation
    ]
     interface ITRegionsCOM: IDispatch
    {
      [
      propget, 
      id(0x000000C9)
      ]
      HRESULT _stdcall list([out, retval] TVectorTRegionCOM ** Value /*Warning: unable to validate structure name: */ );
      [
      propput, 
      id(0x000000C9)
      ]
      HRESULT _stdcall list([in] TVectorTRegionCOM * Value /*Warning: unable to validate structure name: */ );
      [
      propget, 
      id(0x000000CA)
      ]
      HRESULT _stdcall currentRegion([out, retval] TRegionCOM ** Value /*Warning: unable to validate structure name: */ );
      [
      propput, 
      id(0x000000CA)
      ]
      HRESULT _stdcall currentRegion([in] TRegionCOM * Value /*Warning: unable to validate structure name: */ );
    };
    ITVectorTRegionCOM:
    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
    [
      uuid(04D0892E-44E8-4997-B521-70771755DE24), 
      version(1.0), 
      helpstring("Dispatch interface for TVectorTRegionCOM Object"), 
      dual, 
      oleautomation
    ]
     interface ITVectorTRegionCOM: IDispatch
    {
      [
      propget, 
      id(0x000000C9)
      ]
      HRESULT _stdcall element([in] int Position, [out, retval] TRegionCOM ** Value /*Warning: unable to validate structure name: */ );
      [
      propput, 
      id(0x000000C9)
      ]
      HRESULT _stdcall element([in] int Position, [in] TRegionCOM * Value /*Warning: unable to validate structure name: */ );
      [
      propget, 
      id(0x000000CA)
      ]
      HRESULT _stdcall tailleTab([out, retval] int * Value );
      [
      propput, 
      id(0x000000CA)
      ]
      HRESULT _stdcall tailleTab([in] int Value );
    };
    ITRegionCOM:
    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
    [
      uuid(F2D28F27-FAA6-439C-9579-874D3FDCFE12), 
      version(1.0), 
      helpstring("Dispatch interface for TRegionCOM Object"), 
      dual, 
      oleautomation
    ]
     interface ITRegionCOM: IDispatch
    {
      [
      propget, 
      id(0x000000C9)
      ]
      HRESULT _stdcall list([out, retval] TVectorAnsiStringCOM ** Value /*Warning: unable to validate structure name: */ );
      [
      propput, 
      id(0x000000C9)
      ]
      HRESULT _stdcall list([in] TVectorAnsiStringCOM * Value /*Warning: unable to validate structure name: */ );
    };
    ITVectorAnsiStringCOM:
    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
    [
      uuid(A4AB2851-B88F-4101-B78E-54A60DA6EABB), 
      version(1.0), 
      helpstring("Dispatch interface for TVectorAnsiStringCOM Object"), 
      dual, 
      oleautomation
    ]
     interface ITVectorAnsiStringCOM: IDispatch
    {
      [
      propget, 
      id(0x000000C9)
      ]
      HRESULT _stdcall element([in] int Position, [out, retval] LPSTR * Value );
      [
      propput, 
      id(0x000000C9)
      ]
      HRESULT _stdcall element([in] int Position, [in] LPSTR Value );
      [
      propget, 
      id(0x000000CA)
      ]
      HRESULT _stdcall tailleTab([out, retval] int * Value );
      [
      propput, 
      id(0x000000CA)
      ]
      HRESULT _stdcall tailleTab([in] int Value );
    };
    ObjetRunCOM:
    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
    [
      uuid(23D44C29-B3A6-423E-BAFA-D08428AC54D9), 
      version(1.0), 
      helpstring("Dispatch interface for ObjetRunCOM Object"), 
      dual, 
      oleautomation
    ]
     interface IObjetRunCOM: IDispatch
    {
      [
      id(0x000000C9)
      ]
      HRESULT _stdcall Run( void );
      [
      propget, 
      id(0x000000CA)
      ]
      HRESULT _stdcall image([out, retval] TImageDataCOM ** Value /*Warning: unable to validate structure name: */ );
      [
      propput, 
      id(0x000000CA)
      ]
      HRESULT _stdcall image([in] TImageDataCOM * Value /*Warning: unable to validate structure name: */ );
    };

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Déjà, ça me parait bizarre que tes fonctions prennent la coclass (TRegionCOM) en paramètre au lieu de l'interface (ITRegionCOM)...

    Et j'ai l'impression que les warnings sont d'accord avec moi : C'est ce qui doit faire foirer le marshalling...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    PS: Je crois bien me souvenir qu'en COM comme en .Net, les propriétés sont traditionnellement supposées commencer par une majuscule, comme les méthodes. Seules les variables membres (et une interface n'en a pas) sont supposées commencer par une minuscule...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    J'ai changé les CoClass par les interfaces, mais ça ne change rien. J'ai toujours même résultat.
    Les warnings sont toujours là.

    C'est quand même bizarre que ça marche dans un sens et pas dans l'autre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de retour à la ligne
    Par AurelBUD dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 30/05/2006, 15h17
  2. show_hide un div: problème avec retour
    Par -DeN- dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/02/2006, 12h16
  3. Problème de retour aprés l'appel d'une popup
    Par PADAWANN33 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/02/2006, 15h53
  4. [MySQL] problème de retour à la ligne.
    Par NPortmann dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/09/2005, 14h43
  5. [Struts] Problème de retour chariot
    Par pimousse76 dans le forum Struts 1
    Réponses: 5
    Dernier message: 22/11/2004, 15h39

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