F8888889 2024-02-21 10:24 采纳率: 0%
浏览 14
已结题

qt中链接动态链接库,调用其中的函数,该函数的参数需要传入回调函数,自己创建的回调函数无法作为参数传递进去

qt中链接动态链接库,调用其中的函数,该函数的参数需要传入回调函数,自己创建的回调函数无法作为参数传递进去

typedef  void (*SearchUSBPrinters1)(GetUSBPrinter_CallbackProc  , unsigned char * );

SearchUSBPrinters1 fun = (SearchUSBPrinters1)myDll.resolve("SearchUSBPrinters");

fun(Widget::getUSBPrinter_CallbackProc,(unsigned char *)"HK");
void Widget::getUSBPrinter_CallbackProc(getprinterinfo_usbPrinterStateParms_Type *usbPrinterState)
{
    usableUSBPrinterList_Type *curUSBPL;//定义了一个结构体指针
    int currentFoundUSBPrinterNumber;
    if (usbPrinterState == NULL)
        return;
    printf("\nEnter the USB printer discovery call-back processing :register into the USB printer list.\n");//进入USB打印机发现回调处理:注册到USB打印机列表中
    if ((curUSBPL = (usableUSBPrinterList_Type *)malloc(sizeof(usableUSBPrinterList_Type))) == NULL)//给curUSBPL数组分配内存,判断是否为空
        memset(curUSBPL , 0 , sizeof(usableUSBPrinterList_Type));//数组内的值都设定为0
    curUSBPL->usbPrinterState = usbPrinterState;//将得到的值传给curUSBPL结构体指针中的usbPrinterState成员变量
    if (currentUSBPrinterList == NULL)//如果当前USB打印机当前列表指针为空
        currentUSBPrinterList = curUSBPL;//将数组的首地址赋值给-USB打印机当前列表指针
    else
        curUSBPL->next = currentUSBPrinterList;//调用结构体的next的成员变量,把-USB打印机当前列表指针-赋值给next
    currentUSBPrinterList = curUSBPL;//将数组首地址传给列表指针
    currentFoundUSBPrinterNumber ++;//当前找到的打印机编号加一
}

我自己定义的回调函数与fun()回调函数类型不匹配
程序编译后出现以下错误

D:\Mine\ku\7_55\7_55\widget.cpp:54: error: cannot convert 'Widget::getUSBPrinter_CallbackProc' from type 'void (Widget::)(Widget::getprinterinfo_usbPrinterStateParms_Type*)' {aka 'void (Widget::)(Widget::getprinterinfo_usbPrinterStateParms_S*)'} to type 'GetUSBPrinter_CallbackProc' {aka 'void ()(getprinterinfo_usbPrinterStateParms_S)'}
..\7_55\widget.cpp: In constructor 'Widget::Widget(QWidget*)':
..\7_55\widget.cpp:54:14: error: cannot convert 'Widget::getUSBPrinter_CallbackProc' from type 'void (Widget::)(Widget::getprinterinfo_usbPrinterStateParms_Type*)' {aka 'void (Widget::)(Widget::getprinterinfo_usbPrinterStateParms_S*)'} to type 'GetUSBPrinter_CallbackProc' {aka 'void ()(getprinterinfo_usbPrinterStateParms_S)'}
54 | fun(Widget::getUSBPrinter_CallbackProc,(unsigned char *)"HK");
| ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
怎么解决这个问题

  • 写回答

11条回答 默认 最新

  • GISer Liu 2024-02-21 10:29
    关注

    该回答引用自GPT-4,由博主GISer Liu编写:

    针对你描述的问题,出现这种错误通常是因为代码中意外地将一个字符串对象当作函数来调用了。在你的情况下,Model.fit() 函数可能被误认为是一个字符串。

    要解决这个问题,我建议按照以下步骤进行:

    1. 确保 Model 是正确的模型对象:首先确认 Model 是一个有效的模型对象,并且它具有 fit() 方法。检查你是否正确导入了模型并正确实例化了它。如果你使用的是 Keras 或 TensorFlow,确保导入了正确的模块。

    2. 检查代码中的拼写错误:确保你正确地调用了 fit() 方法,没有拼写错误或语法错误。比如检查是否是 Model.fit() 而不是 Model.Fit() 或其他形式。

    3. 确认模型已经编译:在调用 fit() 方法之前,通常需要先对模型进行编译,使用 compile() 方法。确保你已经在调用 fit() 之前对模型进行了编译,这是执行训练所必需的步骤。

    4. 检查是否覆盖了 fit 变量:有时候你可能在代码其他地方将 fit 变量赋值为一个字符串,这样会导致 fit() 方法被覆盖而无法调用。请确保没有这样的赋值操作,避免命名冲突。

    5. 检查模型是否正确加载:如果你是从文件中加载模型,请确保加载的是正确的模型文件,并且成功地加载了模型对象。有时候加载的模型文件可能不正确或者损坏,导致无法正确调用方法。

    6. 查看错误堆栈跟踪:如果以上方法都没有解决问题,查看详细的错误堆栈跟踪信息,定位到具体的代码行,可能会提供更多关于问题的线索。错误堆栈通常会指出错误发生的位置和原因,有助于更快地定位问题。

    根据你的具体情况,逐步检查以上可能的原因,并逐一排除,直到找到导致错误的根本原因,并相应地解决它。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月21日
  • 创建了问题 2月21日

悬赏问题

  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振