投稿者 neptune  (社会人) 投稿日時 2009/10/8 02:50:34
>で宣言してありましたが、これでも大丈夫でしょうか?
KEN さんの宣言はどこを参考にしたのか知りませんが、VB6のものです。
VB2008では大丈夫じゃないからAPI宣言を書いている所のアドレスを紹介しました。
説明するのは大変なので情報を貼り付けておきます。

C言語でのmciSendStringの定義
MCIERROR mciSendString(
  LPCTSTR lpszCommand,  // コマンド文字列
  LPTSTR lpszReturnString,  // 情報を受け取るバッファ
  UINT cchReturn,       // バッファのサイズ
  HANDLE hwndCallback   // コールバックウィンドウのハンドル
);

「C 言語の一般的なデータ型とそれに対応する Visual Basic のデータ型の一覧」
http://winofsql.jp/VA003334/Cprog011103012328.htm

先のAPI宣言のリンク先の内容。
Declare Ansi Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal command As String, ByRef buffer As StringBuilder, _
ByVal bufferSize As Integer, ByVal hWndCallback As IntPtr) As Integer


整数型 (Integer) (Visual Basic 6.0 ユーザー向け)
http://msdn.microsoft.com/ja-jp/library/7f5ztkz3.aspx 
VB6のLongは32 ビット、符号付き
VB2008のLongは64 ビット、符号付き
です。
サイズが違うんです。これは重大な問題で、偶然エラーにならなかったのかも。

VB6のLongはVB2008ではIntegerに該当します。
hWndCallback はコールバックウィンドウのハンドルですからVB2008ではIntPtrに該当します。

私は大昔ここを参考にしました。・・・忘れましたけど。^ ^;
「マルチメディア自由自在! 高レベルMCIを使う 」
ゆっくり読んで下さい。