data ontvangen van php

Status
Niet open voor verdere reacties.
de waarde die vanuit php word verstuurt is: $value
en in c zou hij hem moeten ontvangen met argv[1]
vanuit c stuurt hij argv[1] weer terug.
 
akkoord, maar ik bedoel meer: wat is $value ? een nummer, een tekst, een letter? Hetzelfde geldt voor de waarde die terug gestuurd moet worden.

gr Niek
 
$value is een hex getal.
de waarde die terug komt heb ik niet nodig eigelijk,
 
aha! dan zit daar ook de fout, want waarschijnlijk stuur je het programma dan aan als: project2.exe 0xFF bijvoorbeeld, maar als je die waarde aan atoi() geeft dan kan hij er geen touw aan vast knopen. Je zult dus in het php programma de hex-waarde naar decimaal om moeten zetten, en dan in het c-programma gewoon omzetten met atoi naar int. Dan kun je hem wél gebruiken.


gr Niek
 
nu heb ik in php het volgende:

$prog = "Project2.exe 255";
exec($prog);

dus dan stuurt hij 255 naar het programma. en dan moeten alle leds aan gaan.
Maar nu lukt het me alleen nog niet om in c++ het programma te laten werken. atoi wilt niet op de een of andere manier.
ik heb nu in c++ de volgende code:

Code:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
//#include "Unit1.h"
#include "winbase.h"
#include "windef.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
HANDLE    hcom;

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        DCB dcb;
        DWORD NumberOfBytesWritten;
        //char number;
        int a,b,c,d,e,f,g,h,j,k;
        HANDLE  hcom = CreateFile ("Com1",
                GENERIC_READ|GENERIC_WRITE,
                0,
                0,
                OPEN_EXISTING,
                0,
                0);
        dcb.DCBlength = sizeof(DCB);
        GetCommState(hcom,&dcb);
        dcb.BaudRate = 4800;
        dcb.ByteSize = 8;
        dcb.Parity = NOPARITY;
        dcb.StopBits = ONESTOPBIT;
        SetCommState(hcom, &dcb);
       // SetCommState(


        a = 0x01;
        b = 0x02;
        c = 0x04;
        d = 0x08;
        e = 0x10;
        f = 0x20;
        g = 0x40;
        h = 0x80;
        k = a + b+c+d+e+f+g+h;
        //cout << "argv[1]";
        //number = (argv[1]);
        //int i = atoi(argv[1]);
        int i;
        //const char* argv[1];
        i = atoi (argv[1]);
        printf("%d", argv[1]);
        printf("test");
        WriteFile(hcom, &argv[1], 1, &NumberOfBytesWritten, NULL);
        Sleep(999);
        CloseHandle(hcom);
        return 1;
}
//---------------------------------------------------------------------------

dan krijg ik de volgende foutmelding waar ik een screenshot van heb gemaakt. deze staat op: http://83.117.250.196/naamloos.gif
 
ok, volgend plan:

De foutmelding komt niet van atoi maar van Writefile, omdat er 'ongeldige' data naar geschreven wordt. (&argv[1])
WriteFile neemt als buffer een lpcvoid als parameter, dus dan kan atoi ook wegelaten worden. Nu kom je in het woud van de variabelen-typen die door microsoft bedacht zijn...Ik ben niet bekend met je compiler, ik gebruik zelf VS2005 pro, maar je zou het volgende kunnen proberen:

Code:
WriteFile(hcom, (LPCVOID)argv[1], sizeof(argv[1]), &NumberOfBytesWritten , NULL);
óf
Code:
WriteFile(hcom, argv[1], sizeof(argv[1]), &NumberOfBytesWritten , NULL);


gr Niek
 
Laatst bewerkt:
Nope geen van beide opties werkt.
moet ik een andere compiler ergends vandaan halen nu ofzow? of is er een andere mogelijkheid?
 
Ik heb er nog wat zooi uitgehaald, maar deze code compiled en loopt bij mij in VS2005 en in Borland Builder 6...

Code:
#include <vcl.h>
#pragma hdrstop
//#include "Unit1.h"
#include "winbase.h"
#include "windef.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
HANDLE    hcom;

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
        DCB dcb;
        DWORD NumberOfBytesWritten;
        //char number;
        int a,b,c,d,e,f,g,h,j,k;
        HANDLE  hcom = CreateFile ("Com1",
                GENERIC_READ|GENERIC_WRITE,
                0,
                0,
                OPEN_EXISTING,
                0,
                0);
        dcb.DCBlength = sizeof(DCB);
        GetCommState(hcom,&dcb);
        dcb.BaudRate = 4800;
        dcb.ByteSize = 8;
        dcb.Parity = NOPARITY;
        dcb.StopBits = ONESTOPBIT;
        SetCommState(hcom, &dcb);
       // SetCommState(


        a = 0x01;
        b = 0x02;
        c = 0x04;
        d = 0x08;
        e = 0x10;
        f = 0x20;
        g = 0x40;
        h = 0x80;
        k = a + b+c+d+e+f+g+h;

        WriteFile(hcom, argv[1], sizeof(argv[1]), &NumberOfBytesWritten, NULL);
        Sleep(999);
        CloseHandle(hcom);
        return 1;
}

gr Niek
 
Weer een stapje dichter bij de oplossing. op dit moment gaan dus alle leds heel snel aan en weer uit. en dat is niet echt de bedoeling. het is meer de bedoeling dat ze aan blijven. toen ik de variabele k er in zette bleef hij wel aan. kan ik dit veranderen zodat de leds aanblijven?

ik weet trouwends niet eker of ze allemaal aan gaan maar er gaan er in ieder geval veel aan. het gaat iets te snel om dat goed te zien.
 
Laatst bewerkt:
Daar kan ik niets over zeggen, ik heb hier natuurlijk niet dezelfde hardware aanzitten als jij. Mar je zegt dat je ' k' hebt verstuurd? Hoe dat dan, want WriteFile zal het niet leuk vinden als je een integer probeerd te versturen ipv een const char*.

gr Niek
 
toch lukte het wel.
Als ik dus k stuurde naar writefile dan bleven alle leds branden.
ik weet ook niet hoe dat dan kwam. ik heb aan mijn com poort een microcontroller hangen. als deze een waarde binnenkrijgt blijft hij deze naar buiten sturen totdat er een nioeuwe komt. dus op de een of andere manier stuurt hij 2 waardes door. 1 waarde met 255 en de andere met 0.
en ik weet echt niet hoe ik die 0 weg kan halen.

ik heb net geprobeert 128 te laten zien maar dan gaan ook alle leds aan en dat klopt dus ook niet echt.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan