2014-04-16 24 views
5

Çalışamayacağım çok basit bir test vakam var, C++ ile cytipleri ctip kullanarak kullanmaya çalışıyorum. Çiftler ile çalışırken hatalar alıyorum, bu durumda C++ 'da "cout" kullanmaya çalışıyorum.WindowsError istisnası erişim ihlali - basit python C++ ctypes arabiriminde

hatadır: sorun aşağıdaki c cout hizada

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

++ kod:

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

extern Cı içeren aşağıdaki başlığı (testgeo.h) sahip bölüm:

class TestGeo { 

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

    private: 
    double td_; 
    int ti_; 

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

Ve bu ishal piton kodu (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() 

Düzenleme 1: Hala mücadele ediyorum ve programlama için oldukça yeni. Zaten bana bazı ipuçları verebilir bellek hatasını araştırabilir miyim?

Düzenleme 2:

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 

kod çalıştırma::

python testgeo.py 

Edit 3: Kod üzerinde çalışır Ben yanlış bir şey olması durumunda derleme am nasıl paylaşmak istedim linux makinem ... bu da benim windows problemimden hala emin olduğum anlamına geliyor. Ancak umarım bu duruma biraz ışık verebilir.

+0

Sizin kodunuz gayet iyi. Burada çalışıyor. –

+0

@DavidHeffernan, kontrol ettiğiniz için teşekkürler. Belki de benim windows makinede çalışır veya derleme ile ilgili bir sorun yaşıyorum – windenergy

+0

Ben 64 bit windows kullanıyorsunuz - [This Q & A] (http://stackoverflow.com/a/17242397/3479753) yardımcı olabilir. – etheranger

cevap

0

Diğer sorunları fark ettikten sonra derleyicimin yapılandırmasının sorun olduğu ve bir yeniden yükleme/farklı derleyicinin bu kodun çalışmasına izin verdiği ortaya çıktı.

İlgili konular