py 回调
1、
#include "stdafx.h"
#include <stdio.h>
#define DLLEXPORT extern "C" __declspec(dllexport) //放在 #include "stdafx.h" 之后
typedef void(__stdcall *FUNCTION2)(int * item);
DLLEXPORT void __stdcall testCalBack3(FUNCTION2 callBack) {
//unsigned char *strp =(unsigned char *)&str;
//out[0] = (unsigned char*)'c';
int b = 98;
int *a = &b;
callBack(a);
printf("pp:%d", *a);
//callBack(1, (unsigned char *)"ok");
}
callback_type1 = WINFUNCTYPE(c_void_p,POINTER(c_int))
def callback_func1( p1):
print('',p1)
print('p1[0]',p1[0])
p1[0]=77
print('p1[0]',p1[0])
callable_ptr1 = callback_type1(callback_func1)
res = pDll.testCalBack3(callable_ptr1)
2、指针的指针
typedef void(__stdcall *FUNCTION4)(int ** item); DLLEXPORT void __stdcall testCalBack4(FUNCTION4 callBack) { //unsigned char *strp =(unsigned char *)&str; //out[0] = (unsigned char*)'c'; int b = 98; int *a = &b; int **c = &a; callBack(c); printf("pp:%d", **c); //callBack(1, (unsigned char *)"ok"); }
callback_type4 = WINFUNCTYPE(c_void_p,POINTER(POINTER(c_int))) def callback_func4( p1): print('',p1) print('p1[0]',p1[0]) print('p1[0][0]',p1[0][0]) p1[0][0]=88 print('p1[0]',p1[0]) print('p1[0][0]',p1[0][0]) callable_ptr1 = callback_type4(callback_func4) res = pDll.testCalBack4(callable_ptr1)
3、char
typedef void(__stdcall *FUNCTION5)(char * item); DLLEXPORT void __stdcall testCalBack5(FUNCTION5 callBack) { //unsigned char *strp =(unsigned char *)&str; //out[0] = (unsigned char*)'c'; char b = 'a'; char *a = &b; callBack(a); printf("pp:%c", *a); //callBack(1, (unsigned char *)"ok"); } typedef void(__stdcall *FUNCTION6)(char ** item); DLLEXPORT void __stdcall testCalBack6(FUNCTION6 callBack) { //unsigned char *strp =(unsigned char *)&str; //out[0] = (unsigned char*)'c'; char b = 'a'; char *a = &b; char **c = &a; callBack(c); printf("pp:%c", **c); //callBack(1, (unsigned char *)"ok"); }
callback_type5 = WINFUNCTYPE(c_void_p,POINTER(c_char)) def callback_func5( p1): print('',p1) print('p1[0]',p1[0]) p1[0]=c_char(b"C") print('p1[0]',p1[0]) callable_ptr5 = callback_type5(callback_func5) res = pDll.testCalBack5(callable_ptr5) callback_type6 = WINFUNCTYPE(c_void_p,POINTER(POINTER(c_char))) def callback_func6( p1): print('',p1) print('p1[0]',p1[0]) print('p1[0][0]',p1[0][0]) p1[0][0]=c_char(b"D") print('p1[0]',p1[0]) print('p1[0][0]',p1[0][0]) callable_ptr6 = callback_type6(callback_func6) res = pDll.testCalBack6(callable_ptr6)
4.
typedef void(__stdcall *FUNCTION7)(char ** item); DLLEXPORT void __stdcall testCalBack7(FUNCTION7 callBack) { //unsigned char *strp =(unsigned char *)&str; //out[0] = (unsigned char*)'c'; char b[512];// = 'a'; strcpy_s(b,6 ,"test1"); char *a = b; char **c = &a; callBack(c); printf("pp:%s",(char*) *c); //callBack(1, (unsigned char *)"ok"); }
print('before callback_func7') mstr = 'Hello world' buf = create_string_buffer(mstr.encode('ascii')) callback_type7 = WINFUNCTYPE(c_void_p,POINTER(POINTER(c_char))) def callback_func7( p1): print('callback_func7',p1) print('p1[0]',p1[0]) print('p1[0][0]',p1[0][0]) #p1[0][0]=c_char(b"D") memmove(p1[0], buf , 5) print('p1[0]',p1[0]) print('p1[0][0]',p1[0][0]) callable_ptr7 = callback_type7(callback_func7) res = pDll.testCalBack7(callable_ptr7) print(5)
6、yh最终版
callback_typeYh = WINFUNCTYPE(c_void_p,c_char_p,POINTER(POINTER(c_char)))
def callback_funcYh(p1,pp2):
#str=p2.decode('gbk')+','+p3.decode('gbk')+','+p4.decode('gbk')
#print(p1,p2,p3,p4,p5)
print(p1.decode('gbk'))
strTmp1 = '{"ExcuteRet":"true","Value":"ext connect pass:COM5"}'
#buf = create_string_buffer(strTmp1,"utf8")
buf = create_string_buffer(strTmp1.encode('utf8'))
strp = cast(buf,POINTER(c_char))
#print(strp)
#bufp = byref(buf)
#pp2=strpp
print(pp2,pp2[0])
pp2[0] = (strp)
#pp2[0] = c_char_p(strp)
#memmove(pp2[0], buf , len(buf))
print(buf.value)
#print(pp2.decode('gbk'),pp2[0].decode('gbk'),pp2.contents.decode('gbk'))
callable_ptrYh = callback_typeYh(callback_funcYh)
res = pDll.ConfigYH(callable_ptrYh)
浙公网安备 33010602011771号