2012-08-05 90 views
4

我是来自.NET C#迁移到QT C++,我试图用这个Win32函数来模拟驱动器QT:在QT使用Win32 API中的Windows

[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?

回答

1

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

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

你绝对不需要申报'DefineDosDevice'自己的作用,它已经在'Windows.h'声明。你*当然*不应该这样做。 – 2012-08-14 19:28:51

2

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

3

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

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

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