在QT for Windows中使用Win32 API

时间:2012-08-05 03:42:53

标签: c++ qt winapi

我正在从.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吗?

4 个答案:

答案 0 :(得分:3)

查看DefineDosDeviceQueryDosDevice的文档,您将在下表中看到它们都在“kernel32.lib”库中定义,并在“Windows”中声明。 h“(间接)。

在您的代码中,您应#include <Windows.h>:然后您就可以直接拨打电话了。

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

答案 1 :(得分:2)

您可以将win32 API用作常规C函数。 QT和其他C ++程序没有区别。

答案 2 :(得分:2)

谢谢你的回答! 我的问题的答案是:

#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);
}

答案 3 :(得分:0)

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