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)

 

posted @ 2025-05-16 15:11  cnchengv  阅读(7)  评论(0)    收藏  举报