c++ - 从 C 文件调用 CPP 函数不能正常工作
问题描述
我有一个用 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);
解决方案
我认为代码不起作用是因为我为回调函数编写的静态方法。当我将静态函数更改为类函数时,它起作用了!但我仍然不知道为什么静态方法不起作用。
推荐阅读
- angularjs - Spring Boot Azure AD Bearer Header Authentication(签名的 JWT 被拒绝:无效的签名)
- asp.net-mvc - api 在 URL“api/AuthenticationAPI/logout”中出现两次
- driver - 编译 DPDK 而不编译/安装所有驱动程序
- apache-kafka - Kafka Streams - 具有相同应用程序 ID 的多个线程或多个实例
- scala - 试图打印方法,但它给出了错误
- javascript - 尝试调用一个函数对象,该对象使用在 useEffect 内部更改的状态变量,并获取未定义的状态变量
- python-3.x - 将字典值与numpy数组中的列表配对不起作用
- antd - 自定义一天 AntD 日历
- python - django 的过滤器 SearchFilter 没有过滤结果,它返回我所有的对象
- ruby-on-rails - Pundit 提出了一个错误,否则我不会有