ページ 11

スクリーンセーバーの基礎

Posted: 2012年10月02日(火) 14:59
by LisetteLander
スクリーンセーバーを作りたいのですが、いかんせん基礎の作り方がよくわかりません。
解決方法がわからないエラーがでます。

コード:

#include <Windows.h>
#include <ScrnSave.h>

LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg)
	{
		case WM_CREATE:
			//起動処理
			break;

		case WM_DESTROY:
			//終了処理
			break;

		default:
			break;
	}

	return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    return TRUE;
}

BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
    return TRUE;
}

コード:

1>------ ビルド開始: プロジェクト: ScreenSaver, 構成: Release Win32 ------
1>2012/10/02 15:19:56 にビルドを開始しました。
1>InitializeBuildStatus:
1>  "Release\ScreenSaver.unsuccessfulbuild" のタッチ タスクを実行しています。
1>ClCompile:
1>  main.cpp
1>SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverProc@16" は未解決です。
1>SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "__imp__InitCommonControlsEx@4" は未解決です。
1>c:\users\lise\documents\visual studio 2010\Projects\ScreenSaver\Release\ScreenSaver.exe : fatal error LNK1120: 外部参照 2 が未解決です。
1>
1>ビルドに失敗しました。
1>
1>経過時間 00:00:00.37
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


Re: スクリーンセーバーの基礎

Posted: 2012年10月02日(火) 20:37
by softya(ソフト屋)
文字コードがマルチバイト文字になっていればリンクが成功すると思います。

Re: スクリーンセーバーの基礎

Posted: 2012年10月02日(火) 21:55
by へにっくす
第127章 スクリーンセーバー
ScreenSaverProcは未解決?
ライブラリの指定(scrnsave.lib)を忘れているかな?確認してみてください。

ちなみに__imp__InitCommonControlsExの未解決は、ComCtl32.libの指定も必要なことを示しています。
(昔は必要なかったんですけどね…)

うまくいかなかったらすみません

Re: スクリーンセーバーの基礎

Posted: 2012年10月02日(火) 22:39
by LisetteLander
お二人ともありがとうございます。
無事デバッグがとおりました。

もう3つ質問したいのですが、
今回プロジェクトのプロパティから構成->リンカ->追加の依存ファイルという項目を設定して直しました。
Program Files(x86)というフォルダにエクスプローラで検索をかけて探して、やたら長いファイルパスを直接入力するのですが、
もうちょっと短いファイルパスにする方法はありませんか?
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\ComCtl32.lib;
プログラミングの館で管理人さんがわざわざローカルディスクのルートにDxLibを置けと書いてあるのでできないのかもしれませんが・・

また、
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib
というファイルパスの他にも
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\IA64
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64
というのが検索結果にあがるのですが、何を使えばいいのでしょうか?
今回は何もオプションがついてなさそうなLib/を使いましたが。

それと最後に、
Dxlibの機能をスクリーンセーバーに使用できないでしょうか?
使用したいのは画像の読み込みや描画です。
ですが、描画というのはDxlibが作ったウィンドウに座標を指定して描画するような感じの機能なわけで、それにそのために作られた画像の読み込み関数も使えない・・・?

Re: スクリーンセーバーの基礎

Posted: 2012年10月02日(火) 22:55
by softya(ソフト屋)
LisetteLander さんが書きました: もう3つ質問したいのですが、
今回プロジェクトのプロパティから構成->リンカ->追加の依存ファイルという項目を設定して直しました。
Program Files(x86)というフォルダにエクスプローラで検索をかけて探して、やたら長いファイルパスを直接入力するのですが、
もうちょっと短いファイルパスにする方法はありませんか?
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\ComCtl32.lib;
プログラミングの館で管理人さんがわざわざローカルディスクのルートにDxLibを置けと書いてあるのでできないのかもしれませんが・・
ComCtl32.libだけでリンク通りませんか?
私はリンクできますが。
LisetteLander さんが書きました: また、
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib
というファイルパスの他にも
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\IA64
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64
というのが検索結果にあがるのですが、何を使えばいいのでしょうか?
今回は何もオプションがついてなさそうなLib/を使いましたが。
それが正解です。
IA64はかなり特殊です。
x64は64bitOS専用でコンパイル時に使用します(通常は32/64bit兼用)。
LisetteLander さんが書きました: それと最後に、
Dxlibの機能をスクリーンセーバーに使用できないでしょうか?
使用したいのは画像の読み込みや描画です。
ですが、描画というのはDxlibが作ったウィンドウに座標を指定して描画するような感じの機能なわけで、それにそのために作られた画像の読み込み関数も使えない・・・?
こちらの過去ログにあったと思いますので探してみてください。
「DXライブラリ質問掲示板」
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?

Re: スクリーンセーバーの基礎

Posted: 2012年10月03日(水) 10:21
by LisetteLander
softya(ソフト屋) さんが書きました:ComCtl32.libだけでリンク通りませんか?
私はリンクできますが。
あれ?
・・・すいません、適当なこと言ってました。
それに、
scrnsave.hはComctl32.libに含まれているのでしょうか?
「追加の依存ファイル」はComctl32.libだけ設定してみたらscrnsaveがインクルードできました。
softya(ソフト屋) さんが書きました: それが正解です。
IA64はかなり特殊です。
x64は64bitOS専用でコンパイル時に使用します(通常は32/64bit兼用)。
softya(ソフト屋) さんが書きました: http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?
ありがとうございます、勉強になりました。
この掲示板で探してみます。