2014-04-16 8 views
5

मेरे पास एक बहुत ही सरल परीक्षण केस है जो मैं काम नहीं कर सकता, मैं ctypes का उपयोग कर पाइथन के साथ C++ को इंटरफ़ेस करने का प्रयास कर रहा हूं। मुझे युगल के साथ काम करते समय त्रुटियां मिलती हैं, इस मामले में सी ++ में "cout" का उपयोग करने का प्रयास किया जाता है।विंडोज एरर अपवाद एक्सेस उल्लंघन - सरल पायथन सी ++ सीटीपीएस इंटरफ़ेस

त्रुटि है:

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

समस्या निम्नलिखित ग की अदालत लाइन में निहित है ++ कोड:

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

निम्नलिखित में से कौन हैडर (testgeo.h), एक extern सी सहित अनुभाग:

class TestGeo { 

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

    private: 
    double td_; 
    int ti_; 

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

और अजगर कोड चलता है कि यह (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() 

संपादित करें 1: अभी भी संघर्ष कर रहा है, और मैं प्रोग्रामिंग के लिए काफी नया हूं। क्या वैसे भी मैं स्मृति त्रुटि की जांच कर सकता हूं जो मुझे कुछ सुराग दे सकता है?

संपादित करें 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 

कोड चल रहा है:

python testgeo.py 

संपादित करें 3: कोड पर काम करता है मेरी लिनक्स मशीन ... जिसका मतलब है कि मैं अभी भी अपनी विंडोज़ समस्या के बारे में अनिश्चित हूं। हालांकि उम्मीद है कि यह स्थिति पर कुछ प्रकाश प्रदान कर सकता है।

+0

आपका कोड ठीक है। यह यहाँ काम करता है। –

+0

@ डेविड हेफरन, जांच के लिए धन्यवाद। शायद मुझे यह समस्या हो रही है कि यह मेरे विंडोज मशीन पर विशेष रूप से – windenergy

+0

पर चलता है या संकलित करता है, मुझे लगता है कि आप 64 बिट विंडोज़ का उपयोग कर रहे हैं - [यह क्यू एंड ए] (http://stackoverflow.com/a/17242397/3479753) मदद कर सकता है। – etheranger

उत्तर

0

अन्य समस्याओं को ध्यान में रखते हुए यह पता चला कि मेरे कंपाइलर की कॉन्फ़िगरेशन समस्या थी, और एक पुनर्स्थापित/अलग कंपाइलर ने इस कोड को चलाने की अनुमति दी।

संबंधित मुद्दे