5

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

4 回答 4

4

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

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

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

于 2012-08-05T05:27:30.317 回答
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);
}
于 2012-08-06T09:05:15.457 回答
1

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

于 2012-08-05T04:04:44.963 回答
1

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

于 2021-07-14T08:24:03.980 回答