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

win32APIを通常のC関数として使用できます。QTと他のC++プログラムに違いはありません。

于 2012-08-05T04:04:44.963 に答える
1

.hまたは.cppファイルに#pragmacomment(lib、 "user32")を追加します

于 2021-07-14T08:24:03.980 に答える