none
Windowsフォームアプリケーション de RRS feed

  • 質問

  • 初心者なのですが、

    Visual Studio 2008 でフォーム(Windowsフォームアプリケーション)を作成しシステム稼働時間を

    取得したいのですが、エラーが帰ってきてコンパイルできません。

    GetTickCount()は、Windowsフォームアプリケーションで利用できないのでしょうか?

     

    コード

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)

    {
       double dwStart = GetTickCount();
    }

     

    エラー

    error C3861: 'GetTickCount': 識別子が見つかりませんでした

     

    それとも、.NETの環境(Windowsフォームアプリケーション)では、API(SDK?)は何か定義して置かないとダメなの?

     

    2010年6月11日 9:37

回答

すべての返信

  • それとも、.NETの環境(Windowsフォームアプリケーション)では、API(SDK?)は何か定義して置かないとダメなの?
    Win32API を含むネイティブの DLL 関数の呼び出しには Platform Invoke (P/Invoke) と呼ばれる仕組みを使います。C# では DllImport 属性を使って利用します。
    2010年6月11日 9:45
  • GetTickCount()は、Windowsフォームアプリケーションで利用できないのでしょうか?

    Environment::TickCount を使ってください。


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク s_takejp 2010年6月11日 10:01
    2010年6月11日 9:49
  • #include "Windows.h"

    をコードの先頭記載したらコンパイル通りました。。。すいません。

     

    でも、ひらぽん様のEnvironment::TickCount の方が正解のようですのでそちらを使うようにします。

     

    ちなみに、#include "Windows.h" を記載する場所って、下記の場所でよいのでしょうかね???

    #pragma once

    #include "Windows.h"

    namespace test002a {

     

     

    2010年6月11日 10:00
  • もし、何らかの時間を計測したいのであれば、System.Diagnostics.Stopwatch クラスを使うとよいと思います。

    そうではなく純粋に起動してからの経過時間が知りたいのであれば、ひらぽんさんが書いてますが、EnvironmentクラスのTickCount プロパティでも同じ値が取得できます(signed と unsigned の違いはありますが)。

    そうではなく、GetTickCount 以外にもAPIを使いたいということであれば、利用したいか所で #include <windows.h> をインクルードすれば使えます(利用方法は、NativeのC++と全く同じ)。

    リンクエラーが出た場合は、MSDNライブラリで呼び出しているAPIのリファレンスを見て、必要なライブラリをリンクするようにしてください。

     


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    2010年6月11日 10:10
  • って。。。解決してるのかw

    >ちなみに、#include "Windows.h" を記載する場所って

    位置としてはそこで問題ないと思いますよ。

     

     


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    2010年6月11日 10:11