VC++2005Express版+WIN32SDK+猫でもわかるWindowsプログラミング2で、勉強中ですが、スクリーンセーバーのプログラムでリンクエラーが発生して解決できないでいます。http://www.kumei.ne.jp/c_lang/net2005/sample.htmを元に、書籍を見ながら自分で打ち込んでトライしているのですが、「ScrnSave.Lib(scrnsave.obj) : error LNK2019: 未解決の外部シンボル _RegisterDialogClasses@4 が関数 _DoConfigBox@4 で参照されました。」というリンクエラーが発生します。文字セットはマルチバイトに設定してあります(上記サンプルコードはUNICODE対応ですが、書籍の方はそうでないので、楽な道に走っております)。WEBで_RegisterDialogClasses等で検索すると中国語の記事が沢山ヒットしますが、日本語、英語は少数しかヒットしないので、文字コードの関係もあるのでしょうか?ダメ元でScrnSavw.Libをリンクしたりしてみましたが、当然NGでした。ソースコードの入力ミスはつぶしたつもりですが、上述の様にWEBと書籍の記事の合体です。アドバイスをお願いいたします。
No.4ベストアンサー
- 回答日時:
★原因判明。
・関数名が違います。
間違い⇒ResisterDialogClasses
正しい⇒RegisterDialogClasses
※『s』ではなくて『g』です。
・あと『ComCtl32.lib』もインポートして下さい。
これはスクリーンセーバーで『InitCommonControlsEx』関数が必要だからです。
・以上。
ありがとうございました。
ご指摘の通り、修正すると問題なくビルドできました。タイプミスがこういう形で影響してくる事があるのですね。当然何度もコードは見直しましたが、発見できませんでした。(英語力の無さを露呈?)
C、C++のこの辺の仕組みは理解できておりません。
また、ComCtl32.libは、タイマーコントロールを使っているので必要なのかと思っていましたが、ご指摘の様な意味があるのですね。勉強になります。
おかげさまで、猫Win2の後半に進めます。
皆様、あまり役に立たない質問履歴を残してしまって、申し訳ありませんでした。
No.3
- 回答日時:
★確認。
・ヘッダファイルとして『scrnsave.h』をインクルードして
インポートライブラリとして『scrnsave.lib』をプロジェクトに加えていますか?
もしかしたら『scrnsave.lib』ファイルが存在しないとか。
http://www13.plala.or.jp/kmaeda/winc/saver1.htm→『Screen Saver 入門』
http://www.6809.net/tenk/html/prog/scrnsvr.htm→『CでWin9xのスクリーンセーバーを作ってみる』
・次のリンクも参考にして下さい。
http://sysneitf.hp.infoseek.co.jp/screensaver.html→『Screen Saver スクリーンセーバー』
>WEBで_RegisterDialogClasses等で検索すると中国語の記事が沢山ヒットしますが、
>日本語、英語は少数しかヒットしないので、文字コードの関係もあるのでしょうか?
↑
検索エンジンは何を使っていますか?
私は google を普段使っています。
Web で『RegisterDialogClasses』キーワードを元に検索するとたくさん見つかりますよ。
列挙すると
http://www7a.biglobe.ne.jp/~tsuneoka/win32sub2/4 …→『自動的にログオフを行うスクリーンセーバーの作り方がわかりたい』
http://www.kumei.ne.jp/c_lang/sdk2/sdk_127.htm→『第127章 スクリーンセーバー その1』
http://www.kumei.ne.jp/c_lang/sdk2/sdk_128.htm→『第128章 スクリーンセーバー その2』
http://www.kumei.ne.jp/c_lang/sdk2/sdk_129.htm→『第129章 スクリーンセーバー その3』
http://loafer.jp/mixi/diary/class.xsp?2007-08-19 …→『関数の実装』
http://hp.vector.co.jp/authors/VA030421/try7s12. …→『スクリーンセーバーの作り方』
http://www.syuhitu.org/other/schp.html→『スクリーンセーバー作成』
http://www13.plala.or.jp/kmaeda/winc/saver1.htm→『Screen Saver 入門』
http://www.h4.dion.ne.jp/~fht/wptips/screensaver …→『スクリーンセーバーを作成する』
http://www.6809.net/tenk/html/prog/scrnsvr.htm→『CでWin9xのスクリーンセーバーを作ってみる』
http://www.dinop.com/vc/screensaver.html→『スクリーンセーバーの作成』
http://www.winapi-database.com/special/2002_6/in …→『スクリーンセーバーを作ってみよう』
http://www.cnet-try.ne.jp/akiji/w32a09.htm→『スクリーンセーバーを作ろう』
http://monjyu.biz/monjyu/bord/sen1/msg/165.html→『この関数が必要なのか?』
http://mymio.jugem.jp/?cid=19→『VC++6.0 でスクリーンセーバー』
こんな感じで日本語サイトが見つかります。
ちなみに『_』下線文字が付いた『_RegisterDialogClasses』を検索してはいけません。
VC ではライブラリ(DLL)などの関数名の先頭に『_』下線文字を付けるので。
下線文字を付けると確かにあまり検索されませんね。
API 関数名の先頭の下線文字を取り除いて検索すると良いです。
・以上。
ご回答ありがとうございました。
なにぶん、猫Win2を半分くらいまで読み進んだところで、Text通りに打ち込んで訳の分からないエラーが出てしまってお手上げ状態です。どうせスクリーンセーバーなんか作らないからと、パスしたい誘惑に駆られつつ、それでも何とか出来ないかと質問させていただきました。
ご指摘の通り、RegisterDialogClassesでも検索してみたのですが(シンプルなのが気に入って、当方もGoogleを愛用しています)情報の幅が広すぎて、当方のスキルでは有用な情報を拾い出す事ができませんでした。
余分な物を削っていったコードをA No.1の方に補足させていただきました。ご指摘のscrnsave.hのインクルードと、scrnsave.libのインポートはしています。ご検討いただけると幸いです。
No.1
- 回答日時:
スクリーンセーバーのサンプルとして お示しのサイトを手本にやっておられるのですか?
『ScrnSave.lib』にWinMainとかも含まれていますが ・・・
ご自分で書かれてコードの中に RegisterDialogClass関数はあるのでしょうか
スクリーンセーバーでは
『RegisterDialogClass』『ScreenSaverProc』この2つの関数は必須で自前で用意しなくてはいけません
DoConfigBoxについてはたぶん独自のスクリーンセーバー構成用ダイアログ関連の関数(コールバック関数かも)なのでしょう
これも自前で用意することになります
RegisterDialogClassは構成ダイアログ使う特殊な設定が必要な場合に使いますがそうでないなら TRUEを返す関数を定義すればいいでしょう
ちなみに『ScrnSavw.lib』はUNIICODE用なので当然NGです
# 質問文などは適宜改行しましょう
# 読みにくい質問になりますよ
ご回答ありがとうございました。追加検討していて、お礼が遅れて申し訳ありません。
サイトからは、vc++2005対応のひな形を利用しているだけで、付加する部分は猫Win2の書籍を見て、打ち込んでいます。
チェックするために余分な物を削っていったら、下記の通りになりましたが、相変わらず同じリンクエラーがでます。
scrnsave.libと、comctl32.lib(下記コードには無いがタイマを使うため)をリンクしています。(プロジェクトに既存の項目で追加)。ご指摘の点は満足していると思います。(書籍の内容通りですが)。ご検討をお願いします。
#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_TIMER:
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}
BOOL WINAPI ScreenSaverConfigureDialog(
HWND hDlg, UINT msg, WPARAM wParam,LPARAM lParam)
{
return TRUE;
}
BOOL WINAPI ResisterDialogClasses(HANDLE hInst)
{
return TRUE;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Windows 10 数年前からWindows10 の Update ができないです。なぜですか? 7 2022/11/09 06:03
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Visual Basic(VBA) Access VBAから使用したExcelプロセスを閉じる方法について 4 2022/06/08 17:50
- その他(プログラミング・Web制作) pythonをjupiter notebookからmecabで頻出の高い単語の抽出について(Runt 1 2022/12/17 18:08
- C言語・C++・C# VisualStudioのソースコードで漢字を使いたい 4 2022/05/21 10:16
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- Windows 10 プロファイルエラーについて 2 2022/12/16 09:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タイプライブラリのレジストリ...
-
fatal error LNK1104: ファイル...
-
'stdafx.h'のエラーに関して
-
MP3の再生
-
スタティックライブラリ関係の...
-
DSOUND.LIBが見つかりませんっ...
-
【VS2008 C++】2つのプロジェ...
-
error LNK2001: 外部シンボル "...
-
スタティックリンクライブラリ...
-
operator new が再定義されてい...
-
Visual Studio 2022の『#define...
-
eclipse+MinGWの環境で外部ライ...
-
VB6/SPREAD6.0 について
-
WindowsにおけるPostgreSQL+C言...
-
静的/動的リンクライブラリにつ...
-
LinuxでのGLibとGModuleを使っ...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スタティックライブラリ関係の...
-
fatal error LNK1104: ファイル...
-
【VS2008 C++】2つのプロジェ...
-
C++Builder リンカエラーとは?
-
スタティックリンクライブラリ...
-
visual studio community2017 O...
-
静的/動的リンクライブラリにつ...
-
VC++6.0からVC++.NET2005へ移植
-
VC++でビルド時の、リンク警告 ...
-
error LNK2019: 未解決の外部シ...
-
dllかlibか
-
#pragma commentの相対パス指定
-
VS2010にて、依存関係とビルド順
-
'stdafx.h'のエラーに関して
-
WindowsにおけるPostgreSQL+C言...
-
'd3dx9.lib' が開けません。
-
eclipse+MinGWの環境で外部ライ...
-
lvwReport/エラー/プロジェクト...
-
#include <winreg.h>をインクル...
-
operator new が再定義されてい...
おすすめ情報