【问题标题】:Calling CPP function from C File doesn't work properly从 C 文件调用 CPP 函数不能正常工作
【发布时间】:2021-02-23 07:38:49
【问题描述】:

我有一个用 c 和 c++ 编写的 QT 应用程序。我试图从 C 文件中调用 CPP 函数。当我尝试使用 UI 中的 qpushbutton 调用我的回调函数时,它可以工作,但是当我尝试在主中调用我的回调函数时,它无法正常工作。根据以下代码有什么问题?谢谢。

主窗口.cpp

void MainWindow::on_pushButton_clicked()
{
 QUrl url;
    url.setScheme("ftp");
    url.setHost("192.168.1.2");
    url.setUserName("ftpadmin");
    url.setPassword("password");
    url.setPath("");
    FtpUploadManager *mFtpManager = new FtpUploadManager(url);
    mFtpManager->addFile("/home/user/Desktop/a.txt");
}

文件分析器.cpp

static inline void notify_ftp_manager(void *user,char* FileName)
{
    FileAnalyzer* _this = (FileAnalyzer*)(user);
    QString abc = QString(FileName);
    _this->m_FtpManager->addFile(abc);
}

FileAnalyzer::FileAnalyzer(QString path, QString prefix)
{ 
    QUrl url;
    url.setScheme("ftp");
    url.setHost("192.168.1.2");
    url.setUserName("ftpadmin");
    url.setPassword("password");
    url.setPath("");
    m_FtpManager = new FtpUploadManager(url, this);
    set_ftp_callback_function(notify_ftp_manager, this);
}

文件分析器.h

class FileAnalyzer: public QObject
{
    Q_OBJECT
public:
    FtpUploadManager *m_FtpManager ;
}

回调函数.c

CALLBACKFUNCTION ftp_callback;
void *ftp_callback_user;

void callbackfunction()
{
    if(ftp_callback != NULL && ftp_callback_user != NULL)
        {
        ftp_callback(ftp_callback_user,"a.txt");
        }
}

void set_ftp_callback_function(CALLBACKFUNCTION callbackfnc, void* ftp_callback_caller_user)
{
    ftp_callback = callbackfnc;
    ftp_callback_user = ftp_callback_caller_user;
}
int main()
{
      callbackfunction();
}

回调函数.h

typedef void (*CALLBACKFUNCTION)(void *user,char* fileName);
void set_ftp_callback_function(CALLBACKFUNCTION callbackfnc, void* ftp_callback_caller_user);

【问题讨论】:

  • 这是两个独立的程序吗? MainWindow 对象是在哪里创建的?我在main() 中没有看到它。
  • 在调用callbackfunction()之前必须单击按钮,对我来说这是程序启动时的第一件事。
  • 旁注:为了安全起见,您应该在声明时将ftp_callbackftp_callback_user 设置为nullptr

标签: c++ c qt callback


【解决方案1】:

我认为代码不起作用是因为我为回调函数编写的静态方法。当我将静态函数更改为类函数时,它起作用了!但是我仍然不知道为什么静态方法不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2017-09-12
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多