在QT for Windows中使用Win32 API

Using Win32 API in QT for Windows

本文关键字:Win32 API QT for Windows      更新时间:2023-10-16

我正在从.net C#迁移到QT C++,我正试图使用此Win32函数来模拟QT:中的驱动器

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool DefineDosDevice(int flags, string devname, string path);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int QueryDosDevice(string devname, StringBuilder buffer, int bufSize);

上面的代码在C#中,但我不知道如何在QT中使用它们,有人可以给我一个例子,如何做到这一点,以及如何在QT使用任何Win32 API?

查看DefineDosDevice和QueryDosDeview的文档,您会在底部的表中看到它们都在"kernel32.lib"库中定义,并在"Windows.h"中声明(间接)。

在您的代码中,您应该#include <Windows.h>:然后您将能够直接调用它们。

我不确定你的特定编译器/IDE,但如果你在链接时收到关于"未解析引用"的错误,你可能需要将"kernel32.lib"(来自Windows SDK)添加到你的库路径中。

感谢您的回答!我的问题的答案是:

#include <Windows.h>
void MainWindow::on_pushButton_clicked()
{
    QString qstr1 = "Z:";
    QString qstr2 = getenv("tmp");
    DefineDosDevice(0, (LPCTSTR)qstr1.utf16(), (LPCTSTR)qstr2.utf16());
}
void MainWindow::on_pushButton_2_clicked()
{
    QString qstr = "Z:";
    DefineDosDevice(2, (LPCTSTR)qstr.utf16(), 0);
}

在.h或.cpp文件中添加#pragma注释(lib,"user32")

您可以使用win32API作为常规C函数。QT和其他C++程序没有区别。