2011-10-09 3 views
4

J'ai créé une application VCL en C++, borland. Dans mon projet il y a un fichier où j'ai implémenté python embarqué dans les méthodes définies dans le même (mon application contient un bouton qui appelle la méthode dans laquelle python embarqué est implémenté). quand je compile, ma construction est réussie. mais quand j'exécute mon application, et que je clique sur le bouton, l'erreur d'exécution s'affiche: "Violation d'accès à l'adresse 1E091375 dans le module" PYTHON25.DLL ", lecture de l'adresse 00000004". aidez s'il vous plaît. Je n'ai jamais utilisé Python auparavant. mon programme:intégration de python dans C++

#pragma hdrstop 

#include <fstream> 
#include <iostream> 
#include <iomanip> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 


#include "Python.h" 

#include "Unit1.h" 
#include "Unit2.h" 
#pragma link "python25_bcpp.lib" 

//--------------------------------------------------------------------------- 

#pragma package(smart_init) 

bool callHelloWorld(int intVal) 
{ 
    char fName[] = "Hello"; //file name 
    char cFunc[] = "hello"; //method name 

    char *pfName, *pcFunc; 

    PyObject *pName, *pModule, *pDict, *pFunc ; 

    pfName = fName; 
    pcFunc = cFunc; 

    Py_Initialize(); 

    pName = PyString_FromString(pfName); 

    pModule = PyImport_Import(pName); 

    pDict = PyModule_GetDict(pModule); 

    pFunc = PyDict_GetItemString(pDict, pcFunc); 

    if (PyCallable_Check(pFunc)) 
    { 
     PyObject_CallObject(pFunc, NULL); 
    } else 
    { 
     PyErr_Print(); 
    } 


    // Py_DECREF(pModule); 
    // Py_DECREF(pName); 

    Py_Finalize(); 

    return 0; 
} 
+3

Il me semble me rappeler que Borland C++ utilise une convention d'appel différente (fastcall?). Est-ce que votre python.dll est compilé en utilisant le même compilateur? – cdarke

+0

le python25.dll était dans C: \ Windows \ SysWOW64. Je ne l'ai pas compilé. –

+0

Je ne sais pas si cela aiderait ou non, mais je pense qu'il vous manque certains des fichiers python. Je me souviens avoir eu la même erreur en essayant de compiler mon programme sur une autre machine. Mais dans mon cas, j'utilisais un programme MFC et j'accédais à ma DLL MFC en utilisant le script python. Essayez probablement de réinstaller python. – Neophile

Répondre

1

Vérifiez les valeurs de retour de PyImport_Import (est le module dans le chemin de recherche?) Et PyDict_GetItemString.

Si cela ne vous aide pas à mettre des messages de trace dans votre application pour voir où elle se bloque.

0

Cela fonctionne pour moi:

Il suffit de supprimer Py_Finalize()

Je lis dans un autre site qui Py_Finalize a quelques problèmes dans des cas spécifiques tels que le filetage.

+0

Source d'information s'il vous plait? – quantum

Questions connexes