Chiamando un intero script (in C) da un altro script (in C ++)?

-2

Sono un programmatore molto inesperto, quindi scusami se questa è una domanda stupida da porre. E allo stesso modo, se qualcuno che rispondesse potesse presumere che io non conosca praticamente nulla e mi tratti come un idiota, sarebbe fantastico ...

Ho del codice in C ++ che è un'interfaccia di un dispositivo fisico. È importante sottolineare che parte di questo è la scrittura di immagini sul dispositivo assegnando valori di pixel per una matrice di pixel 512x512, con questi valori memorizzati utilizzando la classe vettoriale C ++. I valori sono scritti in questo usando un puntatore che viene incrementato e dereferenziare il puntatore per assegnare il valore.

Ho anche un codice che ho scritto in C, che calcola quale immagine effettivamente scrivere. (Il codice usa le trasformate di Fourier, per le quali ho usato la libreria FFTW). Quello che voglio fare è questo: ogni volta che nel codice C ++ voglio scrivere un'immagine al dispositivo, voglio chiamare questo codice C per calcolare quale immagine scrivere, e ottenere l'output di il codice C nel codice C ++.

I miei dati C hanno il seguente modulo (se ho capito bene): Ho un puntatore di tipo fftw_complex e quello che presumo sia un array 1D di dimensione 512x512x2 (come s = 512, e fftw_complex deve avere dimensione 2 come è per la memorizzazione di un numero complesso). Nel caso in cui ho sbagliato, ecco la dichiarazione / allocazione di memoria:

fftw_complex *slmPlane slmPlane = (fftw_complex*) fftw_malloc(s*s * sizeof(fftw_complex));

Il mio codice C non è compatibile con C ++. Ho array definiti con dimensioni date da variabili e ci sono molti problemi. Non ho l'esperienza, o davvero il tempo, per rendere questo codice compilato ed eseguito con C ++. Ho visto molti articoli sulla chiamata di singole funzioni C da C ++ ... ma quello che voglio fare è chiamare un intero bit di codice separato, che è una funzione principale oltre a circa 50 altre. E non voglio preoccuparmi di rendere compatibile il codice C C ++.

In definitiva, quindi, quello che devo sapere è:

  1. C'è un modo semplice per chiamare un pezzo di codice separato con l'estensione .c, che non è compatibile con C ++, con lo script C ++ (.cpp)?

  2. Come posso ottenere l'output del codice C (una matrice 1D di lunghezza 512x512x2) nel codice C ++ (dove verrà assegnato agli elementi di un vettore)?

  3. Come bonus - eventuali problemi con il collegamento di diverse librerie da ciascuno di questi due script? (Sto usando librerie C che potrebbero non essere compatibili con C ++, e viceversa ..)

  4. Se sto affrontando tutto questo totalmente nel modo sbagliato, qualcuno potrebbe indicarmi invece una direzione migliore?

posta nh1x0x1 31.05.2016 - 13:08
fonte

1 risposta

1

È un modo per te, di mettere il programma C in una libreria separata? Penso che questa dovrebbe essere la soluzione più semplice.

Un'altra possibilità: puoi compilare il tuo codice C con il compilatore C ++ se inserisci il codice C all'interno di "extern C"? Così:

#ifdef __cplusplus
extern "C" {
#endif
int _numOfYearDay(int jahr, int monat, int tag)
{
    int d, e;
    d = (monat+10)/13;
    e = tag + ((611*(monat+2))/20) - (2*d) - 91;
    if(intern_leapYear( jahr ))
        e += d;
    return e;
}
#ifdef __cplusplus
}
#endif
    
risposta data 01.06.2016 - 14:38
fonte

Leggi altre domande sui tag