在Windows下使用Win32 API的QT

5

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

[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
查看DefineDosDeviceQueryDosDevice的文档,你会在底部的表格中看到它们都在“kernel32.lib”库中定义,在“Windows.h”(间接)中声明。
在你的代码中,应该#include <Windows.h>:然后你就能直接调用它们了。
我不确定你使用的具体编译器/IDE,但如果你在链接时出现“未解决的引用”错误,你可能需要将“kernel32.lib”(来自Windows SDK)添加到你的库路径中。

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

你绝对不需要自己声明DefineDosDevice函数,它已经在Windows.h中声明了。而且你肯定不应该两者都做。 - Cody Gray

2

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


这个很棒。 - Tom
请给我一个声望分数,:) - ytfrdfiw

1

您可以像使用常规C函数一样使用win32 API。在QT和其他C++程序中没有区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接