2014-04-16 8 views
5

Ho un caso di test molto semplice che non riesco a far funzionare, sto cercando di interfacciare C++ con python usando ctypes. Ottengo errori quando lavoro con il doppio, in questo caso cerco di usare "cout" nel C++.WindowsError violazione di accesso alle eccezioni - in semplice python C++ ctypes interface

L'errore è:

WindowsError: exception: access violation writing 0x..... 

Il problema sta nella linea cout della seguente codice C++:

#include "testgeo.h" 
#include <iostream> 
TestGeo::TestGeo() : td_(0), 
        ti_(0) { 
    std::cout<<td_<<std::endl; // problem line 
} 

che ha la seguente intestazione (testgeo.h), comprendente un extern C sezione:

class TestGeo { 

    public: 
    TestGeo(); 
    ~TestGeo(){}; 

    private: 
    double td_; 
    int ti_; 

}; 
extern "C" { 
    __declspec(dllexport) TestGeo* TestGeo_new() { 
     return new TestGeo(); 
    } 
} 

E il codice python che gestisce questo è (testgeo.py):

import ctypes 
lib = ctypes.cdll.LoadLibrary('testgeo.dll') 

class TestGeo(object): 

    lib.TestGeo_new.argtypes = [] 
    lib.TestGeo_new.restype = ctypes.c_void_p 

    def __init__(self): 
     self.obj = lib.TestGeo_new() 

if __name__ == "__main__": 
    testGeoObj = TestGeo() 

Modifica 1: ancora in difficoltà, e sono abbastanza nuovo alla programmazione. Posso comunque indagare ulteriormente sull'errore di memoria che potrebbe darmi qualche indizio?

Edit 2: ho pensato di condividere come sono la compilazione nel caso in cui è qualcosa che non va:

x86_64-w64-mingw32-g++ -c testgeo.cpp -o testgeo.o -std=c++11 -O2 -Wall -Wextra -Weffc++ -pedantic 
x86_64-w64-mingw32-g++ -shared -o testgeo.dll testgeo.o 

L'esecuzione del codice:

python testgeo.py 

Edit 3: Il codice funziona su la mia macchina Linux ... il che significa che non sono ancora sicuro del mio problema con Windows. Tuttavia si spera che potrebbe fornire un po 'di luce sulla situazione.

+0

Il tuo codice è a posto. Funziona qui. –

+0

@DavidHeffernan, grazie per il controllo. Forse ho un problema con il modo in cui viene eseguito o compila sul mio computer Windows in particolare – windenergy

+0

Vedo che stai usando finestre a 64 bit - [Questo Q & A] (http://stackoverflow.com/a/17242397/3479753) può aiutare. – etheranger

risposta

0

Dopo aver notato altri problemi, è risultato che la configurazione del mio compilatore era il problema, e un compilatore di reinstallazione/diverso ha permesso l'esecuzione di questo codice.

Problemi correlati