APIから、.net Frameworkへ への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 2003  (社会人) 投稿日時 2010/12/23 11:46:34
>そういった物は通常、API とは呼ばれません
そうなのですか。
わかりました。ご助言ありがとう
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/12/23 10:43:06
> ジョイステイックからの入力は、現在もAPIを呼び出さなければならないのでしょうか
本題の質問については解決されたのでしょうか?
それとも、他にも追加の情報が必要でしょうか?


> amazonnにまだありました。 
amazon の場合、書籍の ISBN さえ分かっていれば、
http://www.amazon.co.jp/dp/4789837092
と短く表現できますよ。
URL 短縮化という手もありますね。 http://goo.gl/esTWY とか http://bit.ly/i5NJJU とか。
投稿者 2003  (社会人) 投稿日時 2010/12/23 10:26:44
http://www.amazon.co.jp/%E6%A5%BD%E3%81%97%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%AE%9A%E7%9F%B3%E2%80%95%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AB%E5%AD%A6%E3%81%B6%E5%AE%9F%E8%B7%B5%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E7%9B%B8%E6%B2%A2-%E5%B4%87%E7%B5%B9%E6%81%B5/dp/4789837092/ref=sr_1_1?s=books&ie=UTF8&qid=1293067503&sr=1-1
amazonnにまだありました。
投稿者 2003  (社会人) 投稿日時 2010/12/23 10:22:22
本のコードは掲載できませんが、著者は「相沢崇絹恵」 楽しくわかるプログラミングの定石
(CQ 出版社)です

この道に精通している魔界の仮面弁士  さんならご存じかもしれませんね
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/12/22 22:34:09
> Sub / Function の名前を指している
そういった物は通常、API とは呼ばれません。

自作関数であっても、それを DLL 等のライブラリとして公開しているようなケースでは、
広義の意味で API と呼ばれる事もありますけれども……そういった『自作関数』も含めて
「API」という括りで質問されているのだとしたら、元の質問
>> 現在もAPIを呼び出さなければならないのでしょうか
に対しては、正直、答えようがありません。(^^; ケースバイケースだと思いますよ。


一応探してみたら、こんなページが見つかりました。
http://d.hatena.ne.jp/DJEBEL375/20051019
これを見ると、GetJoy / GetJoyEx という Sub を作って利用していますが、
そこから呼ばれている API は、先述の joyGetPos / joyGetPosEx API ですね。
投稿者 2003  (社会人) 投稿日時 2010/12/22 21:57:50
ジョイステイックからの入力はwindowsAPIを呼び出して行うのでプログラムの先頭に
Import system.Runtime.Interopservicesを追加します。となっています。
しかし、コードを見る限りでは
(c) InitJoy / GetJoy というのは API ではなく、VB 側にコーディングされた
  Sub / Function の名前を指している
のようです。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/12/22 20:51:16
そもそも、その GetJoy という関数は
 (a) Microsoft が提供する、標準的な Win32 API である。
 (b) その書籍に付属していたライブラリによって提供されている API である。
 (c) InitJoy / GetJoy というのは API ではなく、VB 側にコーディングされた
  Sub / Function の名前を指している。
 (d) その他
のいずれにあたるのでしょうか。
(今回の話は、a についての質問だと思ったので、それを前提に答えていました)

また、もしも a もしくは b だとして、そのライブラリはどういった物なのでしょうか。

 ・参照設定して使うタイプ ( ActiveX/COM の DLL )
 ・参照設定して使うタイプ ( .NET 用マネージ DLL)
 ・Declare 宣言(または DllImportAttirubte) して使うタイプ
 ・その他 (DDE メッセージでデータ交換するものなど )
投稿者 2003  (社会人) 投稿日時 2010/12/22 20:12:13
2004年に発行されたゲームプログラミングの本です
そこでは、ジョイステイックの入力の宣言、ジョイステイックの初期化、ジョイスティックの状態を取得
といった処理が長々と書かれています。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/12/22 19:52:47
う~ん。聞いた事が無いです。それって、Microsoft 提供の API ですか?

DirectX を使わないジョイスティック系の Win32 API というと、マルチメディア API の
joyGetPos(Ex) などを連想していたのですが、InitJoy / GetJoy という API は初耳です。
http://msdn.microsoft.com/ja-jp/library/cc428426.aspx
投稿者 2003  (社会人) 投稿日時 2010/12/22 19:36:41
.>具体的には、なんという API を使っていたのでしょうか?
Import system.Runtime.Interopservicesを追加してから

関数InitJoyを実行してジョイステイックの検出を行いました
ジョイステイックの状態は関数GetJoyを実行して取得しました。


投稿者 (削除されました)  () 投稿日時 2010/12/22 19:35:36
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/12/22 19:27:59
> ジョイステイックからの入力は、現在もAPIを呼び出さなければならないのでしょうか
具体的には、なんという API を使っていたのでしょうか?

ジョイスティック入力は、VB6 でも VB.NET 2003 でも、
DirectInput を使うのが一般的だったと思うのですけれども。

下記はキーボード、マウスの話ですが、ジョイスティックの場合についても書いてありますね。
http://www.geocities.co.jp/SiliconValley/7406/tips/mouse/mouse2.html
http://www.geocities.co.jp/SiliconValley/7406/tips/mouse/mouse3.html


ただ、今となっては Managed DirectX は過去の物なので、SlimDX を使った方が良いかも知れません。
(XNA という選択肢もありますが、基本的には C# 用のライブラリなのでハードルが高くなります)
投稿者 2003  (社会人) 投稿日時 2010/12/22 18:30:47
魔界の仮面弁士 様 ありがとうございます
MSDNの調べ方も忘れてしまい面食らっている次第です

もう一点ご指導願いたいと思います
ジョイステイックからの入力は、現在もAPIを呼び出さなければならないのでしょうか
ジョイステイックの検出、状態の取得など面倒なコードを綴ったように記憶してますが
その部分は変わっていないのですか

投稿者 (削除されました)  () 投稿日時 2010/12/22 18:29:30
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/12/22 11:33:35
>  VB2003ころに少しかじったことがあります。
もしかして 2003 当時の情報ではなく、2005以降の情報を探していたのかな…。
(先の URL にある資料は、.NET 2.0 以降の情報が記載されていません)

結局、.NET Framework とは言っても、追加のライブラリ(Microsoft 製以外の物も含む)によって
対応状況は変わるので、どこまでを含めるかにもよるでしょうね。

たとえば、画面のプロパティなどから選択可能な画面解像度の取得には、
EnumDisplaySettings API が使われますが、.NET から取得する場合には、
SupportedDisplayModes プロパティで代用する事ができますが、この場合には
XNA Framework (もしくは Managed DirectX)が必要となります。
http://msdn.microsoft.com/ja-jp/library/microsoft.xna.framework.graphics.graphicsadapter.supporteddisplaymodes.aspx
http://msdn.microsoft.com/ja-jp/library/bb281507.aspx
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=261
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/12/22 10:43:00
たとえば、このあたりとか。
http://msdn.microsoft.com/ja-jp/library/aa302340.aspx
投稿者 2003  (社会人) 投稿日時 2010/12/22 10:20:55
VB2003ころに少しかじったことがあります。
質問ですが、当時はキーボードから入力する処理にAPI(GetKeyState関数)を使用しておりましたが
VB2010では、.net Frameworkのライブラリを使用することで長たらしいコードを記述する必要が
なくなりラクになっと感じています。
これは一例ですが、他にどのような処理が、.net Frameworkのライブラリで簡単に処理できるように
なったのでしょうか?
代表的なものでもいいですからおしえてください
(自分でしらべてみてくださいと言われそうですが、お願いします)