Figured it out, Thanks
On Wed, Jan 24, 2018 at 4:25 PM, Jason Qian <jq...@tibco.com> wrote: > Again, thanks for the help. Everything is working fine after the changes. > > Here is one more new issue needs some help. > > On c side, > > The createService function can pass a callback handler as second > parameter. > Without callback handler, it works fine. But if we add the callback > handler, the application will give a exception due to the pointer of > callback handler = NULL; > > Not sure, why the callback handler missed up, when the app calling from > python. > > Thanks > > -- python > > lib.createService.argtypes=[ctypes.c_void_p,ctypes.c_char_p] > lib.createService.restype=ctypes.c_int > > def create_services(self,servicename): > result=lib.createService(self.obj,servicename) > return result > > --c -- > > __declspec(dllexport) int createService(void* obj, const char* > serviceName) > { > return ((myPythonAPI*)obj)->createService(serviceName); > } > > int myPythonAPI::createService(const char* serviceName) > { > //case 1 : > //This works fine > createService(methodname); > > //case 2 > //This will not working, > InvocationCallback serviceCallback; > createService(methodname, &serviceCallback); > } > > > > > > > > > > > > On Mon, Jan 22, 2018 at 5:58 PM, Jason Qian <jq...@tibco.com> wrote: > >> Thanks you very much, fixed the problem :) >> >> On Mon, Jan 22, 2018 at 4:28 PM, Random832 <random...@fastmail.com> >> wrote: >> >>> On Mon, Jan 22, 2018, at 16:00, Jason Qian via Python-list wrote: >>> > Hello! >>> > >>> > I am using ctypes on Windows to interface with a dll and it works >>> fine >>> > on Linux and windows 32-bit python. But, when using 64-bit python, we >>> got >>> > error "exception: access violation writing 0xFFFFFFFF99222A60". >>> >>> You are treating the obj type (myPythonAPI *) as c_int, which is only 32 >>> bits. You should be using a pointer type instead (ideally you should be >>> using void * and c_void_p, so Python doesn't need the class definition.) >>> Don't forget to set lib.loadInstance.restype as well. >>> >>> > __declspec(dllexport) myPythonAPI* loadInstance(){ return new >>> > myPythonAPI(); } >>> > __declspec(dllexport) int createService(myPythonAPI* obj, const char* >>> > serviceName) { eturn obj->createService(serviceName); >>> >>> > lib = cdll.LoadLibrary('xxxxxxx.dll') >>> > >>> > lib.createService.argtypes=[c_int,ctypes.c_char_p] >>> > lib.createService.restype=ctypes.c_int >>> > >>> > class myDriver(object): >>> > def init(self): >>> > self.obj = lib.loadInstance() >>> -- >>> https://mail.python.org/mailman/listinfo/python-list >>> >> >> > -- https://mail.python.org/mailman/listinfo/python-list