ページ 11

CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 11:22
by コレジャナイ
緊急のため出先から失礼致します

先日教わりましたCreateFontToHandleの関数を用いました所

外部シンボル int DxLib::CreateFontToHandle(引数の列挙)
は未解決です

外部参照 が未解決です

とのエラーが発生しました。
長い間悪戦苦闘しておりましたが、どうしても解決に至らなかったため、質問致しました。

普通の外部参照エラーであるなら、今回CreateFontToHandleが表記してある文章の関数が宣言されていなかったりが原因だったりするのですが、今回には当て嵌まりませんし・・・。


分割コンパイルが原因かと思い、とりあえずメイン関数で実行を試しましたが、同様のエラーが発生しました。

サンプルにある
int FontHandle;
FontHandle = CreateFontToHandle(NULL,40,3);
としても駄目でした。


携帯端末からでとても見にくい質問となってしまい、誠に申し訳ございません。


なお、代理投稿のため返信出来ない場合があることをご理解下さい

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 11:26
by softya(ソフト屋)
別のプロジェクトを作ってCreateFontToHandleのサンプルのコードのままでもエラーになりますか?
すごく単純ミスをしている気がします。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 12:30
by コレジャナイ
別プロジェクトで試した結果
プロジェクトの設定を変えない場合は
DrawStringToHandleの第三引数でエラーが

プロジェクトの設定を
マルチバイト文字
MTdに変更すると、質問と同じエラーが発生しました


単純なミスというのは恐らくプロジェクトの設定、あるいはプロジェクトの作成段階において選択ミスをしているという事で間違いないでしょうか?

念のため空のオブジェクトにチェックを入れたものと入れなかったものの二通り試しましたが、いずれも上記した結果となりました。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 12:35
by softya(ソフト屋)
コレジャナイ さんが書きました:別プロジェクトで試した結果
プロジェクトの設定を変えない場合は
DrawStringToHandleの第三引数でエラーが

プロジェクトの設定を
マルチバイト文字
MTdに変更すると、質問と同じエラーが発生しました


単純なミスというのは恐らくプロジェクトの設定、あるいはプロジェクトの作成段階において選択ミスをしているという事で間違いないでしょうか?

念のため空のオブジェクトにチェックを入れたものと入れなかったものの二通り試しましたが、いずれも上記した結果となりました。
別プロジェクトと言うのはCreateFontToHandleのリファレンスのサンプルのままと言う理解で良いでしょうか?
それでエラーが出るならDxlibのリンクに問題があるとしか思えません。
それとdxlibのバージョンを教えて下さい。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 12:51
by コレジャナイ
その通りです

DXライブラリはVer3.08a
です

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 13:01
by softya(ソフト屋)
もう一度、DXライブラリの設定を確認してみてください。特にリンク。
Ver3.08aだからの問題では無さそうです。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 13:41
by コレジャナイ
失礼しました
DX_VCフォルダ内にあるサンプルプログラムにてCreateFontToHandleを試した所、正常に表示されました。
プロジェクトのファイルパスがおかしいのかもしれないと思い、再確認しましたが正常でした。

DXライブラリ自体の設定というのはDX_VCのフォルダ内で行えます?

ノートパソコンのバッテリーが切れてしまったため、現在確認出来る術がなく・・・orz

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 14:50
by softya(ソフト屋)
設定は使っている環境で変わります。
下記の設定を再確認してみてください。
「DXライブラリ置き場 使い方説明」
http://homepage2.nifty.com/natupaji/DxLib/dxuse.html

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 18:04
by コレジャナイ
そちらに記載されている方法で一から注意しつつ新しいプロジェクトを立ち上げ、サンプルコードは正常に表示されたDXプロジェクトからコピペしてきて試しましたが同じエラーが表示されてしまい駄目でした。


DXフォルダ内のデータが一部破損している以外に原因は考えられますでしょうか?
(データ破損にしてはサンプルコード内で表示出来てはいるのでおかしな話ですが・・・。
またこのエラーが発生する関数がCreateFontToHandleだけというのも不思議です。
他のDX関数にも異常が見られれば頷ける話なのですが・・・。)


旅行から帰ってき次第、最新版をダウンロードし試そうとは考えてますが、何か解決策があるようでしたら試しておきたいです。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月17日(月) 18:21
by softya(ソフト屋)
ライブラリは異常はないと思います。
とりあえず正確なエラーメッセージとリビルドを試してみてください。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月18日(火) 01:17
by コレジャナイ
ビルドは同様のエラーにより完了しませんでした

以下エラー内容

↓最初のMain.objはメイン関数に関わらず何処に置いても駄目でしたので、恐らく関係は無いです。
Main.obj : error LNK2001:外部シンボル ゙゙int __cdecl DxLib::CreateFontToHandle(char const *,int,int,int,int,int,int,int,int)゙ (?CreateFontToHandle@DxLib@@YAHPBDHHHHHHHH@Z)゙ は未解決です。

プロジェクトのファイルパス、プロジェクト名.exe : fatal error LNK1120: 外部参照 1 が未解決です。


以上です

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月18日(火) 04:01
by へにっくす
コレジャナイ さんが書きました:↓最初のMain.objはメイン関数に関わらず何処に置いても駄目でしたので、恐らく関係は無いです。
Main.obj : error LNK2001:外部シンボル ゙゙int __cdecl DxLib::CreateFontToHandle(char const *,int,int,int,int,int,int,int,int)゙ (?CreateFontToHandle@DxLib@@YAHPBDHHHHHHHH@Z)゙ は未解決です。
引数の数が違くない?

55. 文字のサイズや太さを変更する

CreateFontToHandleをみると4つしかないけど。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月18日(火) 08:45
by beatle
へにっくす さんが書きました:
コレジャナイ さんが書きました:↓最初のMain.objはメイン関数に関わらず何処に置いても駄目でしたので、恐らく関係は無いです。
Main.obj : error LNK2001:外部シンボル ゙゙int __cdecl DxLib::CreateFontToHandle(char const *,int,int,int,int,int,int,int,int)゙ (?CreateFontToHandle@DxLib@@YAHPBDHHHHHHHH@Z)゙ は未解決です。
引数の数が違くない?

55. 文字のサイズや太さを変更する

CreateFontToHandleをみると4つしかないけど。
実は引数は4つではないのです。DXライブラリ 3.07d のソースから抜粋です。

コード:

extern	int			CreateFontToHandle( const TCHAR *FontName, int Size, int Thick, int FontType = -1 , int CharSet = -1 , int EdgeSize = -1 , int Italic = FALSE , int Handle = -1 ) ;
intが一つ足りませんが3.08で追加されたのではと推測。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月18日(火) 10:39
by softya(ソフト屋)
こうなると、まるっとプロジェクトを見ないとわからないですね。
ただ、うちはまともにVC++2010が動かないんですよね。
コンパイルぐらいは出来かもしれません。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月18日(火) 11:56
by コレジャナイ
成る程…
 
因みに開発環境はVC+2008です

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月18日(火) 22:48
by へにっくす
beatle さんが書きました:実は引数は4つではないのです。DXライブラリ 3.07d のソースから抜粋です。

コード:

extern	int			CreateFontToHandle( const TCHAR *FontName, int Size, int Thick, int FontType = -1 , int CharSet = -1 , int EdgeSize = -1 , int Italic = FALSE , int Handle = -1 ) ;
そうですか、これは盲点でしたねえ。
beatle さんが書きました:intが一つ足りませんが3.08で追加されたのではと推測。
えっと3.08c落としてみましたが同じですね。
そう簡単に増やすとは思えなかったので最新の3.08cを落として宣言をみると、やっぱり変わってません。

コード:

extern	int			CreateFontToHandle( const TCHAR *FontName, int Size, int Thick, int FontType = -1 , int CharSet = -1 , int EdgeSize = -1 , int Italic = FALSE , int Handle = -1 ) ;			// 新しいフォントデータを作成

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月20日(木) 17:34
by コレジャナイ
東京に戻りました。

プロジェクトを送るというのは、エラーが表示されたサンプルコードをお渡しすれば宜しいでしょうか?
それともソースコードが含まれているフォルダ毎でしょうか?

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月20日(木) 17:37
by softya(ソフト屋)
多分プロジェクトの設定に問題があります。
ソースとプロジェクトファイルです。
その他の大きいバイナリファイルや画像などの実行に関係するファイルは不要です。
※ 圧縮して数KB程度のはずです。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月20日(木) 18:30
by コレジャナイ
送信致しました

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月20日(木) 18:35
by softya(ソフト屋)
コレジャナイ さんが書きました:送信致しました
受け取りましたが結構余分なものが付いてました。あれがなかれば数KBなんですが。
で、結論から言うとコンパイル・リンクに問題がありませんのでプロジェクトにも異常はありません。

問題があるとしたらVC++の設定以外にはないと思います。
「DXライブラリ置き場 使い方説明 2.VisualStudio2008 でDXライブラリを使うための設定を行う」
http://homepage2.nifty.com/natupaji/DxL ... 08.html#R2
再確認をしてみてください。2重に指定していないかとかパスが間違いってないかなど。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月21日(金) 21:09
by コレジャナイ
これでもかってほど確認しているのですが・・・駄目です・・・。
別のPCで同様に確認してみたら大丈夫でした。
取り敢えずはそちらで開発していけば良いのですが、ノートの方が使えないと色々不便なため悪戦苦闘しております;

何か見落としがあるのかもしれません。
指示された箇所のSSを撮りますので、何か気になる所がありましたらおっしゃって頂けると助かります。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 01:40
by コレジャナイ
正常に作動したメインPCの設定をエクスポートし、ノートPCでインポートしたところ解決せず。

メインPCのDXライブラリがver3,05だったので、最新版をダウンロードして試した所、メインPCでもエラーが発生するようになりました。

何が解決に繋がるか分からないため、判明した範囲でお伝えしました。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 07:58
by beatle
No.11でのエラーメッセージは,もちろんそのままですよね?
だとすると,
コレジャナイ さんが書きました: Main.obj : error LNK2001:外部シンボル ゙゙int __cdecl DxLib::CreateFontToHandle(char const *,int,int,int,int,int,int,int,int)゙ (?CreateFontToHandle@DxLib@@YAHPBDHHHHHHHH@Z)゙ は未解決です。
CreateFontToHandleの引数の int の数は8個なのですよね.
一回うまくいかない環境の DxLib.h を開いて,CreateFontToHandle を extern 宣言している行を探し,その行を掲示板にコピペして教えてくれますか?
もしかしたら(そんなことはないと思いますが・・・)DxLib.h が壊れていて int 型引数が 8 個になってしまっているかもしれません.

ちなみに,僕がダウンロードした 3.08a の DxLib.h の当該行(2885行)は以下のようになっていました.

コード:

extern	int			CreateFontToHandle( const TCHAR *FontName, int Size, int Thick, int FontType = -1 , int CharSet = -1 , int EdgeSize = -1 , int Italic = FALSE , int Handle = -1 ) ;			// 新しいフォントデータを作成
整形するとこんな感じ.

コード:

int CreateFontToHandle(const TCHAR *, int, int, int, int, int, int, int) ;
int型の引数は7つです.

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 09:42
by softya(ソフト屋)
感触からはヘッダとライブラリのバージョンが食い違っているんじゃないかと思うわけです。
なので、
③ 右側の『ディレクトリを表示するプロジェクト』から『インクルードファイル』を選びます。
⑤ 『ディレクトリを表示するプロジェクト』を今度は『ライブラリファイル』にします。
の両方がみたいです。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 12:00
by コレジャナイ
>>beatleさん
エラーメッセージのコピペが↓です

コード:

Main.obj : error LNK2019: 未解決の外部シンボル "int __cdecl DxLib::CreateFontToHandle(char const *,int,int,int,int,int,int,int,int)" (?CreateFontToHandle@DxLib@@YAHPBDHHHHHHHH@Z) が関数 _WinMain@16 で参照されました。
1>C:\Users\\Desktop\\Debug\.exe : fatal error LNK1120: 外部参照 1 が未解決です。
intが確かに8個でした。

ver3,08c DxLib.h(こちらは2897行目でした)からのコピペです

コード:

extern	int			CreateFontToHandle( const TCHAR *FontName, int Size, int Thick, int FontType = -1 , int CharSet = -1 , int EdgeSize = -1 , int Italic = FALSE , int Handle = -1 ) ;			// 新しいフォントデータを作成
こちらはintが7個。

原因はやはり自分の設定みたいですね・・・。


>>ソフト屋さん
お送り致しました。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 12:04
by beatle
うーん,正しいDxLib.hを#includeしているのにintが8個のエラーメッセージがでるというのは非常に不思議なので,一旦DxLib.hの名前を変えて(たとえばDxLib_original.h)リビルドしてみてください.
もしそれで同じ「未解決の外部シンボル」エラーが出るなら,名前を変えたDxLib.hは#includeされていないということです.

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 12:07
by コレジャナイ
>>beatleさん
試した所、
includeファイルを開けません
というエラーに変わりました。

include自体はされてるみたいです・・・。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 12:16
by softya(ソフト屋)
設定にも問題は見当たりません。
あとはVC++2008のインクルードしているフォルダの何処かに謎のDXlib.hが落ちていることぐらいでしょうか。
VC++上で、関数を選んですべての参照の検索をしてみてください。8個の引数があるCreateFontToHandleのDXlib.hがありますか?
そして、そのDXlib.hのバージョンは? ※ DXlib.hの先頭にバージョンが埋め込まれています。
もしDXlib.h以外が開いたら、そいつが犯人です。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 12:32
by コレジャナイ
CreateFontの関数を選択し、全ての参照を押してみても
一つはDxLib.hの2897行
もう一つはtest.cpp
が表示されるだけでした・・・。



血迷ってDxLib.hのCreateFontToHandleの引数の最後に自分で
int test = -1
と付け加えた所、今までと同じエラーが表示されました。

しかし、あぁやっぱり駄目かと思って付け加えた部分を消してみたらコンパイルが通りました!!
ちゃんと表示されてます!

全然意味が分からないのですが、何なんでしょうか・・・?

メインPCでもこのやり方で直るか試してみます。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 12:36
by コレジャナイ
メインPCでも同様のやり方で直りました。

本当に直っているのか、かなり疑問ではありますが・・・。


全く何が原因だったのか理解出来ないですが、一応解決したため解決チェックは付けておきます。

何か気になる事がありましたら、おっしゃって頂ければ調べてみます。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 12:39
by softya(ソフト屋)
コレジャナイ さんが書きました:メインPCでも同様のやり方で直りました。

本当に直っているのか、かなり疑問ではありますが・・・。


全く何が原因だったのか理解出来ないですが、一応解決したため解決チェックは付けておきます。

何か気になる事がありましたら、おっしゃって頂ければ調べてみます。
それはだいぶ前に書いた私のリビルドしましたか?と繋がります。
VC++のメニューでビルド→ソリューションのリビルドをしていれば解決した問題かも知れません。
本当にリビリドしていましたか?

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 12:44
by コレジャナイ
>>ソフト屋さん
あぁ・・・自分が行ったのはデバッグモードをReleaseにしてから
プログラム名 のリビルド(E)
でしたOTL

ここではなくソリューションのリビルドを行えば良かったのですね・・・orz


自分の不手際で必要以上にお手を煩わせてしまって本当にすみませんでした。。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 12:49
by softya(ソフト屋)
DebugとReleaseのリビルドは各々関連性はありませんよ。各々リビルドしてください。
ちなみにリビルドが必要な場合は、DXlib.hなどライブラリのフォルダの内容を入れ替えた場合です。
古いヘッダでコンパイルされたままのオブジェクト(中間)ファイルはライブラリを入れ替えた場合に自動でリコンパイルされないので最新のヘッダと内容がずれる場合があります。

Re: CreateFontToHandle 未解決エラー

Posted: 2012年9月22日(土) 13:00
by コレジャナイ
なるほど・・・。
自分は製作途中のゲームを友人などに手渡す際くらいにしかリビルドを使っていませんでしたので勉強になりました。
DxLibのVerを更新した際などには忘れずリビルドを行いたいと思います。

有難う御座いましたm(_ _)m