2012-08-05 310 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)添加到您的庫路徑。