0

基本的に私は Mac でプログラミングしていますが、「windows.h」が含まれていた学校のグループのソース コードを使用しています。

私はいくつかの調査を行いましたが、明らかに OSX 用のそのファイルのレプリカはありません。

ここのスレッドで、「ダミー」の windows.h ファイルを作成して、必要な #include または関数プロトタイプを挿入するだけでよいという回答を見ました。これを行うために、私はオンラインに接続し、いくつかの Microsoft ディレクトリから必要な機能を取得しました。

私はそれを続行し、ZeroMemory 関数がエラーを出すまで、すべてが正常に機能していました。

したがって、ダミーの「windows.h」ファイル内:

void ZeroMemory([in] PVOID  Destination,[in] SIZE_T Length);

次のエラーが表示されます。

Expected parameter declarator
Use of undeclared identifier 'in'
Expected ')'

今、私は関数とそのエラーをグーグルで検索しましたが、このコード行だけを含む一連のコードを見つけ続けていますが、これはあまり役に立ちません。

私が知る必要があるのは、ここからどこへ行くのかということです。この「ダミー」の windows.h ファイルを作成することで正しいことをしていますか? または、windows.h を使用して回避する別の方法はありますか?

ダミーの windows.h ファイルを使用するための答えを見つけたリンクはこちらです。

皆様のご意見をお待ちしておりますので、何か気になる点がございましたら、お気軽にお寄せください。どうもありがとうございました!


コメントに従ってコードの一部を変更した後:

void ZeroMemory(PVOID  Destination, SIZE_T Length);

次のエラーが表示されます。

Unknown type name PVOID
Unknown type name SIZE_T

不足している定義があるかもしれないと思っていましたが、これらは TYPE 名なので、Struct のようなものから出てくる必要がありますか? 私が間違っている場合は修正してください。:D

4

2 に答える 2

0

標準の C または C++ に準拠する単純なアプリケーションの "windows.h" を含む、Windows プラットフォームの開発者が陥りがちな非常に悪い習慣です。

最も正しい選択肢は、他の生徒/教師を励ますことでしょうか? アプリケーションを作成するときに標準の c または c++ ヘッダー ファイルのみを使用する。これにより、Windows API 固有の関数を使用しないようになります。

もちろん、windows.h を作成し、簡単な Windows メソッド (MooseBoys が回答したように、ZeroMemory は memset で簡単に実装できます) をインライン化して、単純なプログラムを変更せずにコンパイルできますが、遅かれ早かれ、一部のプログラムは簡単または便利な標準の C / C++ または CoreFoundation (OSX では、ウィンドウ操作にアクセスするための同等のフレームワーク) と同等の Windows API を使用します。

于 2015-12-14T09:27:03.103 に答える
0

ヘッダーに[in]注釈がある場合は、間違ったファイルを取得しています。おそらく、実際のヘッダーではなくIDLファイルです。ヘッダーでは_In_代わりに、空のマクロになるはずです。SIZE_Tいずれにせよ、発見したようなものの定義が欠落しているため、まだ問題があります。ヒットしたすべての依存関係を置き換えたい場合を除き、呼び出し自体を独自のバージョンに置き換えることをお勧めします。の場合ZeroMemory(p,s)、簡単に に置き換えることができるはずですmemset(p,0,s)。もちろん、これは Windows ヘッダーで単純な機能のみを使用していることを前提としています。ウィンドウ処理や入力など、実際のプラットフォーム固有のものを使用している場合は、おそらく Windows を実行しているマシンまたは VM を取得する必要があります。

于 2015-12-14T06:16:13.983 に答える