15

HINSTANCE完全な (そして大きな)windows.hヘッダーを含めずに、WinAPI から型を前方宣言する方法はありますか?

たとえば、RenderWindowを所有するクラスがある場合HINSTANCE mInstance、 を含める必要がありwindows.hますRenderWindow.h。そのため、必要なものにはすべてRenderWindowも含める必要がありますwindows.h

含めてみwindef.hましたが、これには からいくつかのものが必要なようですwindows.h。:-( 前方宣言できない場合、 in の代わりにlong mInstanceinのようなものを使用するポータブルな方法は少なくともありますか?RenderWindowHINSTANCE

4

5 に答える 5

9

HINSTANCE は、WinDef.h でtypedef HINSTANCE__* HINSTANCEとして宣言されています。

ヘッダーに次のように記述できます。

#ifndef _WINDEF_
class HINSTANCE__; // Forward or never
typedef HINSTANCE__* HINSTANCE;
#endif

WinDef.h が含まれていない場合、HINSTANCE を参照するとコンパイル エラーが発生します。

于 2010-04-04T16:57:00.883 に答える
6

void* と宣言して、エラーをキャストできます。これは終わりのない戦いに近いですが、遅かれ早かれつまずくでしょう。windows.h のサイズを気にしないように、プリコンパイル済みヘッダーを使用します。

stdafx.h:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
于 2010-04-04T13:51:39.030 に答える
3

たとえば、RenderWindowを所有するクラスがある場合HINSTANCE mInstance、 を含める必要がありwindows.hますRenderWindow.h。そのため、必要なものにはすべてRenderWindowも含める必要がありますwindows.h

Pimpl イディオムを見たことがありますか? これにより、プライベート メンバーを非表示にすることができます。副作用は、クラスのヘッダーにそれらのヘッダーを含める必要がないことです。

于 2010-04-04T13:53:58.437 に答える
1

やあ@NoSenseEtAl私たちはまだそこにいると思います。

2021 年にHINSTANCEは、 で定義され<minwindef.h>ます。直接含めると<minwindef.h>、「No Target Architecture」というエラーが表示されます

このエラーを回避するには、次の手順を実行します (x64 用のビルドを想定)。

#define _AMD64_
#include <minwindef.h>

int main() {
    HINSTANCE h;
}

マクロは文書化されていないことに注意してください。マクロ_AMD64_はアンダースコアで始まるため、ユーザーが定義することはできません。

また、 によってのみ定義される<Windows.h>ため、定義するために含める小さなヘッダーはありません。

どうやら、Windows SDK がモジュールで正常に動作する可能性が高いため、代わりにモジュールでビルド速度を修正できます。

于 2021-11-23T15:25:15.277 に答える