【问题标题】:Using Win32 API in QT for Windows在 QT for Windows 中使用 Win32 API
【发布时间】:2012-08-02 13:38: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?

【问题讨论】:

    标签: c++ qt winapi


    【解决方案1】:

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

    【讨论】:

    • 这很好用。
    【解决方案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中声明了。而且你当然不应该两者都做。
    【解决方案3】:

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

    在你的代码中,你应该#include &lt;Windows.h&gt;:然后你就可以直接调用它们了。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多