0

Windows.h の CreateThread 関数を使用したいのですが、ヘッダー ファイルに含まれる #defines とがらくたはすべて使用しません。.dll または .lib からその関数だけをインポートする方法はありますか (それがその名前だと思います)。テストして失敗しました:

#pragma comment(lib,"Kernel32.lib")
__declspec(dllimport)
unsigned long
__stdcall
WaitForSingleObject(
    void* hHandle,
    unsigned long dwMilliseconds
    );


int main()
{
    WaitForSingleObject(0,0);
}
4

3 に答える 3

3

はい、DLLを動的にロードし、関数のアドレスを取得してから呼び出すことができます。ただし、Windows.hの問題が何であるかはわかりません。

LoadLibrary GetProcAddress

于 2012-06-05T17:39:20.483 に答える
2

少なくとも2つのオプションがあります。

  1. ヘッダーを含める必要はありません。の定義はCreateThread変更されません。その宣言(およびそれが依存する宣言)をWindowsヘッダーから独自のソースファイルにコピーするだけです。

  2. 使用するWindowsAPI関数のラッパーを記述してから、Windows APIの使用法を「単純化」して、Windows.hやその他のヘッダーをあちこちに含める必要がないようにすることができます。

私の意見では、後者のオプションは、エラーが発生しにくく、単純であり、非標準関数を分離してコードの移植を容易にするため、おそらく好ましいと思います。

于 2012-06-05T17:44:31.993 に答える
0

DLLはすでにコンパイルされているため、プリプロセッサディレクティブがないので、DLLを含めてもワーキングセットを汚染することはないと思います。ソースファイル(* .hファイル)をインクルードする場合は、これらの関数もコンパイルする必要があります。これは、これらのディレクティブやその他のがらくたに大きく依存する可能性があります。

于 2012-06-05T17:43:20.310 に答える