Avatar billede plazm Nybegynder
10. december 2004 - 20:45 Der er 6 kommentarer og
1 løsning

Omskrivning til funktion

Hejsa, jeg søger en gut der ville være flink at skrive Main() om så jeg kan bruge det som en funktion i stedet for det bliver kørt når programmet bliver kørt. Jeg ville gerne kunne bruge ledctrl( W/M , 1/0 ) og implantere koden ind i noget eksistrerende kode jeg har fået lavet.

#include <windows.h>
#include <stdio.h>
HANDLE ATKACPIhandle;

#define MLED    0x44454c4d
#define WLED    0x44454c57
#define LED    0x44454c00
int CtrlACPI(int code, int hasArg, int arg)
{
    long bytes = 0;
    long inbuf[5];
    struct cmbuf {
        short cmds[2];
        long cm2;
    } cbuf;
    long outbuf[192];
    int ret;
 
    cbuf.cmds[0] = 0;
    cbuf.cmds[1] = 4;
    cbuf.cm2 = arg;
    inbuf[0] = 2;
    inbuf[1] = code;
    inbuf[2] = hasArg;
    inbuf[3] = 8 * hasArg;
    inbuf[4] = (long)&cbuf;

    ret = DeviceIoControl(ATKACPIhandle, 0x222404, inbuf, sizeof(inbuf),
        outbuf, sizeof(outbuf), &bytes, NULL);
    return ret;
}

int main(int argc, char *argv[]) {
    int code = LED;
    int onoff;

    if (argc != 3) {
        fputs("usage: ",stderr);
        fputs(argv[0],stderr);
        fputs(" M|T|W 0|1\n",stderr);
        exit(1);
    }

    ATKACPIhandle = CreateFile("\\\\.\\ATKACPI",
        GENERIC_READ|GENERIC_WRITE,
        FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
        0, NULL);

    if (ATKACPIhandle) {
        code |= argv[1][0];
        onoff = argv[2][0] & 1;

        CtrlACPI(code, 1, onoff);
    }
}
Avatar billede arne_v Ekspert
10. december 2004 - 22:57 #1
Omdøb den fra main til oldmain !

:-)
Avatar billede arne_v Ekspert
10. december 2004 - 22:59 #2
int oldmain(int argc, char *argv[]) {
  ...
}

kan så kaldes som:

char args[3][11] = { "foobar.exe", "M", "0" };
...
oldmain(3,args);
Avatar billede plazm Nybegynder
11. december 2004 - 19:57 #3
nu prøvede jeg for sjovs skyld

main() {
  char args[3][11] = { "leds.exe", "M", "0" };
  oldmain(3,args); 
}

og får

81  [Warning] passing arg 2 of `oldmain' from incompatible pointer type

linie 81 =  oldmain(3,args);
Avatar billede arne_v Ekspert
11. december 2004 - 19:59 #4
Hm.

Måske:

char *args[3] = { "leds.exe", "M", "0" };

Avatar billede plazm Nybegynder
11. december 2004 - 19:59 #5
se det var noget den kunne lide ;)
smid et svar
Avatar billede arne_v Ekspert
11. december 2004 - 20:00 #6
ok
Avatar billede plazm Nybegynder
11. december 2004 - 20:02 #7
Takker for svaret
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB