mcrblog

vcpp-ml

2001年12月

30

[vcpp 00057027] Re: joyGetPosEx APIのdwButton変数の値

こんにちは、村尾DOSです。

初期化されていないだけではないでしょうか?

>  JOYINFOEX joyinfo;

   memset( &joyinfo, 0x00, sizeof( JOYINFOEX));
   joyinfo.dwSize = sizeof (JOYINFOEX);
   joyinfo.dwFlags = JOY_RETURNALL;    <----  この行は違うかも。

>  char aa[10];
>  joyinfo.dwXpos=30000;
>  while(joyinfo.dwXpos!=0)
>  {
>   joyGetPosEx(JOYSTICKID1, &joyinfo);
>   printf(itoa(joyinfo.dwButtons, aa, 10));
>  }

こんな感じでどうでしょう?
___________________________________
   村尾DOS   Address ── Web Site http://www.muraodos.com/
             └─── E-Mail ───  b...@muraodos.com
30

[vcpp 00057026] XPでVC

でうみです

XPプリインストールのDELL のノートでVC++を実行しているのですが
Debug,Releaseモードのどちらでも実行すると砂時計のままになります。
マウスカーソルを動かせるだけで何も出来なくなります。
同じような投稿を見かけた記憶があるのですが、
あれって解決したんでしょうか?
回避方法ご存知の方教えて下さい。
30

[vcpp 00057025] Re: joyGetPosEx API の dwButton 変数の値

土肥と申します。

ジョイパッドの操作などをしたことはないので、まったくの勘違いかもしれません
が、
MSDNを見てちょっと、思ったことがあったので。

> DebugビルドでOKだと思ったのは、
> 以下のプログラムを実行してみると、
> Debug のときは、ボタンを押すと、
> 1=>1 2=>2 3=>4 4=>8
> が表示されたのに、Release では、
> ずっと0が表示されるからです。

まず、joyGetPosEx 関数は成功してるのでしょうか?
それは、戻り値なんかを標準出にでも出力すれば、確認できますよね。

> #include <afxwin.h>
> #include <stdio.h>
> #include <mmsystem.h>
> #pragma comment(lib, "winmm.lib")
>
> void main()
> {
>  JOYINFOEX joyinfo;
>  char aa[10];
>  joyinfo.dwXpos=30000;
>  while(joyinfo.dwXpos!=0)
>  {
>   joyGetPosEx(JOYSTICKID1, &joyinfo);
>   printf(itoa(joyinfo.dwButtons, aa, 10));
>  }
>  return;
> }

もし、このソースがすべてなのでしたら、

MSDNから引用-------

パラメータ
uJoyID
照会するジョイスティック(JOYSTICKID1 または JOYSTICKID2)の識別子を指定しま
す。
pji
ジョイスティックの拡張位置情報とボタンの状態が入る JOYINFOEX 構造体のアドレ
スを指定します。dwSize メンバおよび dwFlags メンバの値は必ず設定してくださ
い。設定しない場合、この関数は失敗します。joyGetPosEx 関数から返される値は、
dwFlags メンバで指定するフラグに依存します。
------------

をみると、dwFlagsの初期化をしていないので、失敗してしまうのではないでしょう
か?
Debug版とRelease版とでは、メモリの初期化値が確か異なるので、
Debug版ではたまたまうまいフラグがセットされていたようにみえただけではないで
しょうか?

はずしていたらごめんなさい。

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
     Takuo Doi
     E-mail  : t...@mail6.alpha-net.ne.jp
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
30

[vcpp 00057024] Re: joyGetPosEx API のdwButton変数の値

こんにちは。

http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_joygetposex.htm
に日本語での解説があります。

LPJOYINFOEX pji
の解説を読めば原因はわかると思います。
それに、こういう場合は戻り値を見た方がいいですよ。

間違っていたらすいません。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
菅原 一樹  Kazuki Sugahara
使用環境
     Computer ・・・ 440BX-PIII450自作 or DELL Inspiron8100
     Software ・・・ Visual C++ 6.0 SP5
     OS ・・・ Windows2000 SP2
ICQ : 9754449    Mail : k...@po.sakura.ne.jp
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
30

[vcpp 00057023] joyGetPosEx API の dwButton 変数の値

どうも。ホッシーです。

C++の文法は多少は理解できますが、
英語はちょっと苦手なのでMSDNは
翻訳ソフトに頼ってます。

joyGetPosEx API を使って、
JoyPad のボタン入力を読み取りたいんですが、
(ファミコンとかでいう)十字キーの方の入力は
読み取れるんですが、右側の 1 2 3 4 ボタンの
読み取りは Debug ビルドでは問題なく読めるのに
Release ビルドでは読み取れませんでした。

DebugビルドでOKだと思ったのは、
以下のプログラムを実行してみると、
Debug のときは、ボタンを押すと、
1=>1 2=>2 3=>4 4=>8
が表示されたのに、Release では、
ずっと0が表示されるからです。

私の作ったテスト用プログラムの作り方
1.Win32 Console Application を選択
2.空のプロジェクト
3.ソースファイルを Main.cpp の名前で新規作成
4.以下のソースをコピー&ペースト

#include <afxwin.h>
#include <stdio.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")

void main()
{
 JOYINFOEX joyinfo;
 char aa[10];
 joyinfo.dwXpos=30000;
 while(joyinfo.dwXpos!=0)
 {
  joyGetPosEx(JOYSTICKID1, &joyinfo);
  printf(itoa(joyinfo.dwButtons, aa, 10));
 }
 return;
}

なお、十字キーを左にすると終了します。

-- 私の環境 --------------------------------
   機種   NEC PC-LC700J/64DH
   OS   Windows2000Pro
 ジョイパッド すいません。もらい物なので
        機種名&メーカー名は不明です
        USB接続です。
--------------------------------------------

なぜこうなるのか、なにか
心当たりのある方、よろしくお願いします。


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
 送信者 : ホッシー
   Mail : h...@yahoo.co.jp
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
記事検索
Amazon.co.jp
  • ライブドアブログ