Avatar billede heyn Nybegynder
11. april 2013 - 13:28 Der er 8 kommentarer og
2 løsninger

Hvordan 'fanger' man en funktions udskrift til terminalen.

Hej Eksperter

Jeg har problemer med C (ikke C++).

Jeg har en dll fil i Linux.

En af denne fils functioner heder flxCardTransaction.

Når jeg skriver

rc = flxCardTransaction(0, beloeb, 208, 0x00, 1234567, &error);

Udskriver flxCardTransaction en  tekst i terminalen.

rc og &error er bare flag for resultatet af funktionen.

Er der en metode så jeg kan 'fange' den tekst der bliver skrevet til terminalen så  i stedet får den ind i en variaben

char* flxText;

Venlig hilsen Christian
Avatar billede arne_v Ekspert
11. april 2013 - 14:58 #1
proev:

freopen("redir.out", "w", stdout);
kald
laes fra redir.out
Avatar billede segmose Nybegynder
11. april 2013 - 15:06 #2
Mit gæt er at du skal sætte en callback function op så denne kaldes i stedet for default tilbage meldingen.
Dette er kun en start til yderlige søgning.


/*  FLEX FUNCTIONS      */

/*
        Function:      flxInitCallback
                                initialize and activate callback function
        Input:          method_id      - id from FLX_CALLBACK enum
                                method_ptr      - pointer to callback function
        Output:        -
        Return:        FAILURE        - not OK
                                SUCCESS        - OK.
*/
DllExport void flxInitCallback (
                        FLX_CALLBACK method_id,
                        void* method_ptr);
Avatar billede Druesukker Nybegynder
11. april 2013 - 16:28 #3
Bortset fra Wine projektet har jeg ikke hørt om nogen som brugte .dll filer i Linux.

Er du sikker på at du ikke mener .so eller .a fil?

Anyway, så er arnes svar udmærket. Hvis du har brug for at skifte mellem
hvilken fil stdout skal strive til kan du også dup2 (see man dup2).

Et eksempel (uden error handling) kunne være:

void redirect_stdout(int fd)
{
    fflush(stdout);
    fdatasync(fd);
    dup2(fd, STDOUT_FILENO);
}

Et eksempel på brugen af funktionen kunne være

static const char FILE_OUT[] = "Hello from test file\n";
static const char FILE_NAME[] = "/tmp/test-file";

int main(void)
{
    char buf[sizeof(FILE_OUT)];
    int n, tmp_stdo, stdo = dup(STDOUT_FILENO);

    tmp_stdo = open(FILE_NAME, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);

    redirect_stdout(tmp_stdo);
    printf(FILE_OUT);
    redirect_stdout(stdo);

    lseek(tmp_stdo, 0, SEEK_SET);
    n = read(tmp_stdo, buf, sizeof(FILE_OUT) - 1);
    buf[n] = '\0';

    printf("The following was written to stdout:\n\t%s\n", buf);

    close(tmp_stdo);
    return 0;
}
Avatar billede Druesukker Nybegynder
11. april 2013 - 16:31 #4
...
Man bør egentlig også kalde close(stdo)
Avatar billede segmose Nybegynder
11. april 2013 - 19:22 #5
Jeg er bare rimelig sikker på at det ikke er nogen god løsning til et betalings system. Hvis der er et API kald til at gøre det rigtigt så bør det bruges. Men uden dokumentationen kan jeg ikke fortælle hvad det rigtige kald er.
Avatar billede Druesukker Nybegynder
11. april 2013 - 21:21 #6
Hvis man ikke har lyst skrive oplysningerne til disk man mounte et tmpfs.
Avatar billede arne_v Ekspert
13. april 2013 - 03:57 #7
Hvis der er et callback er det jo smart.

Det fremgik ikke af spm., men segmose kender tilsyneladende API'et.
Avatar billede heyn Nybegynder
15. april 2013 - 09:53 #8
Alle jeres svar har været mig til stor hjælp.

Hvordan øger man point med 120?

Smider i alle et svar?

Druesukker:
Det lader til du kender kilde etc. Jeg er kommet i det problem at ham der skulle udvikle vores kortterminals tilslutning til kassesystemet ikke er i stand til at arbejde. Jeg har ikke programmeret C++ (for slet ikke at nævne C) i 10 - 15 år. Og så tilmed i Linux! Vores medarbejder efterlod sig ingen dokumentation på sin kode, så jeg har faktisk ikke andet end et simpelt eksempel som Point sendte mig. De sender jo ellers kun demo til Windows i C#.
Har du et forslag til hvor man kan finde lidt backup?

Med venlig hilsen Christian
Avatar billede arne_v Ekspert
16. april 2013 - 00:51 #9
svar fra mig
Avatar billede heyn Nybegynder
16. april 2013 - 13:36 #10
Fantastisk!!! Min terminal udskriver regninger - Min chef er MEGET glad - Han snakker allerede messecentre.
Men PBS skal jo lige først godkende min kode!!! :)

MANGE tak fra Christian

P.s. Hvis i nu havde nævnt hvordan jeg øgede pointgivning ville i være 'rigere' :)
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