data ontvangen van php

Status
Niet open voor verdere reacties.

lukkezeh

Gebruiker
Lid geworden
26 sep 2006
Berichten
29
Hallo allemaal,

Voor school ben ik bezig met een project waarbij ik 8 uitgangen moet kunnen aansturen via de com poort en het rs232 protocol.
Op dit moment kan ik via c++ deze poort aansturen maar nu moet ik dit gaan doen via een webbrowser. Nu heb ik dus al een stukje php en c++. Alleen weet ik niet hoe het verder moet.
Hoe kan ik een variabele vanuit php sturen naar mijn programma?
Hieronder post ik de codes die ik nu heb:

c++ 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>
HANDLE    hcom;

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

#pragma argsused
int main(int argc, char* argv[])
{
        DCB dcb;
        DWORD NumberOfBytesWritten;
        int a,b,c,d,e,f,g,h,i,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, &k, 1, &NumberOfBytesWritten, NULL);
        Sleep(10);
        CloseHandle(hcom);
        return 0;
}

de php code:
PHP:
<?php
if (isset($_POST['Submit'])){
	if (!isset($_POST['a'])){
		$_POST['a'] = '0';
	}
	if (!isset($_POST['b'])){
		$_POST['b'] = '0';
	}
	if (!isset($_POST['c'])){
		$_POST['c'] = '0';
	}
	if (!isset($_POST['d'])){
		$_POST['d'] = '0';
	}
	if (!isset($_POST['e'])){
		$_POST['e'] = '0';
	}
	if (!isset($_POST['f'])){
		$_POST['f'] = '0';
	}
	if (!isset($_POST['g'])){
		$_POST['g'] = '0';
	}
	if (!isset($_POST['h'])){
		$_POST['h'] = '0';
	}
	$opgetelt = $_POST['a'] + $_POST['b'] + $_POST['c'] + $_POST['d'] + $_POST['e'] + $_POST['f'] + $_POST['g'] + $_POST['h'];
	print $opgetelt;
	$value = $opgetelt;
	$prog = "Project2.exe " . $value;
	exec($prog);
}
else {
?>
<form name="form1" method="post" action="">
  <p><br>
    1
    <input name="a" type="checkbox" id="a" value="1">
    <br>
    2
    <input name="b" type="checkbox" id="b" value="2">
    <br>
    3
    <input name="c" type="checkbox" id="c" value="4">
    <br>
    4
    <input name="d" type="checkbox" id="d" value="8">
    <br>
    5
    <input name="e" type="checkbox" id="e" value="16">
    <br>
    6
    <input name="f" type="checkbox" id="f" value="32">
    <br>
    7
    <input name="g" type="checkbox" id="g" value="64">
    <br>
    8
    <input name="h" type="checkbox" id="h" value="128">
    <br>
    <input type="submit" name="Submit" value="laat zien">
  </p>
  </form>
<?php
}
?>
 
Ik ben geen PHP-held, maar je kunt toch bestanden maken met PHP? Dan zet je je variabelen daarin en laat je het CPP-programma om de zoveel tijd kijken of het bestand gewijzigd is. Pas alleen dan wél op dat je de acces niet aan beide progs tegelijk geeft: crash

gr Niek
 
Ik kan met exec() het programma aanroepen. en dan moet het ook mogelijk zijn een variabele mee te geven. maar dat weet ik dus niet hoe dit moet.
Jou oplossing is juist niet de bedoeling.
 
oh dan!

int main(int argc, char* argv[])
{

Je kunt argumenten meegeven aan je programma, dus als je programma bijv. test heet, dan kun je op starten met "test.exe hoi". Wat er gebeurd is dat main() de parameter gaat beoordelen. Hij maakt argc 2 (+1 voor 'test' en +1 voor 'hoi'), dit is dus het aantal parameters +1. Dan maakt zet hij de meegeven waarde in de array van arrays argv[]. Dus argv[0] = test en argv[1] = hoi. En dan heb je de waarde in je C-programma!

gr Niek
 
volgens mij moet je in je php dan ook nog een variable zetten die deze waardens ontvangt.
 
Hoe voeg ik dat dan precies in mijn programma??

c:\blabla\Test.exe hoi hallo

Code:
int main(int argc, char* argv[])
{  

printf("aantal meegegeven variabelen: %d", argc - 1);
for (int i = 0; i <= argc; i++)
{
    printf("Parameter %d: %s", i, argv[i]);
}

}

zoiets dus, ik heb het trouwens niet getest, maar het zou moeten werken!

En hoe doe ik dit dan weer in php?
Daar kan ik je helaas ook niet verder mee helpen, sorry
gr Niek
 
Ik denk dat nu het probleem nog ligt dat ik ascii moet omzetten naar hexadecimaal.
Ik weet het niet zeker. volgends mij is argv[1] ascii en ik moet een hex getal hebben om hem naar buiten te sturen.
 
#include <stdlib.h>


int i = atoi(argv[1];

dan is het iig een int, en als je die wil gaan gebruiken om een poort aan te sturen, hoef je het ook niet noodzakelijk om te zetten naar HEX.

gr Niek
 
Laatst bewerkt:
ik krijg met int i = atoi(argv[1]);
de volgende foutmelding: cannot convert int to const char
type mismatch in parameter _s (wanted const char, got int)

Wat kan ik hier dan weer aan doen?
 
ik krijg met int i = atoi(argv[1]);
de volgende foutmelding: cannot convert int to const char
type mismatch in parameter _s (wanted const char, got int)

Wat kan ik hier dan weer aan doen?

maaker er een constant char van , :P of verander die aangeroepte functie om een int te ontvangen
 
dat werkt niet. dat had ik al geprobeert. allebei de opties niet. hij blijft foutmeldingen geven. altijd dezelfde.
 
zou je je code willen posten, dan kan ik beter zien wat je bedoeld.

gr Niek
 
de php code:

Code:
$value = 0xFF;
	print $value;
	$prog = "Project2.exe " . $value;
	exec($prog);

de c++ 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, int 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]);
        const char* 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 argv[1];
}

als ik nu dus die // voor i = atoi (argv[1]) weghaal krijg ik gegarandeert een foutmelding.
 
dat kan ik me voorstellen, ik zei namelijk :
Code:
int main(int argc, char* argv[])
{  
CODE] [/QUOTE]
Maar wat jij daarvan gemaakt hebt is:
[QUOTE][CODE]int main(int argc, int argv[])
{

zie je het verschil?


gr Niek
 
ik snap wat je bedoelt maar ik krijg nu dus nog steeds de fout dat hij int niet om kan zetten naar char*
ik heb op dit moment een vnc server draaien. hiermee kun je via het internet een andere pc bedienen. misschien wil je me op die manier helpen? zo kun je zelf ook de foutmeldingen zien. stuur maar een mailtje als je dat wilt.
lukkezeh@hotmail.com

ik krijg dus op dit moment wanneer ik die regel heb aangepast nog steeds die zelfde melding.
 
Laatst bewerkt:
ik heb op dit moment een vnc server draaien.
Helaas, ik zit hier op het werk en ik denk dat mijn baas dat niet gaat waarderen :)

zou je misschien nog kunnen vertellen welke variabelen over en weer gestuurd moeten worden (van php->C en andersom), dan zal ik er nog weer even naar kijken!

gr Niek
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan