Help: 64bit python call c and got OSError: exception: access violation writing 0xFFFFFFFF99222A60
Jason Qian
jqian at tibco.com
Wed Jan 24 23:04:22 EST 2018
Figured it out,
Thanks
On Wed, Jan 24, 2018 at 4:25 PM, Jason Qian <jqian at 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 <jqian at tibco.com> wrote:
>
>> Thanks you very much, fixed the problem :)
>>
>> On Mon, Jan 22, 2018 at 4:28 PM, Random832 <random832 at 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
>>>
>>
>>
>
More information about the Python-list
mailing list