GetUseDirect3DDevice9()が未解決ですと表示されます。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
HI魔神
記事: 30
登録日時: 6年前
住所: 福井(大都会)

GetUseDirect3DDevice9()が未解決ですと表示されます。

#1

投稿記事 by HI魔神 » 5年前

Effekseer関係の処理でGetUseDirect3DDevice9()を呼ばなければならないのですが、未解決ですとのエラーメッセージが出ます。
以下が表示されたメッセージです。

エラー 1 error LNK2019: 未解決の外部シンボル "class DxLib::D_IDirect3DDevice9 * __cdecl DxLib::GetUseDirect3DDevice9(void)" (?GetUseDirect3DDevice9@DxLib@@YAPAVD_IDirect3DDevice9@1@XZ) が関数 "void __cdecl DeviceRestoreFunction(void *)" (?DeviceRestoreFunction@@YAXPAX@Z) で参照されました。

開発環境はvisual stdio 2013ですが、Effekseerの都合上プラットフォーム ツールセットを2010のものにしています。
DXライブラリのバージョンは最新のもの(8/20現在)を、Effekseerも同様に最新のものを使用しております。

未解決です というのはヘッダー部分にはそれが記述されているがソース部分にそれがない、という意味にとらえていたのですが・・・
ライブラリでもそういったことは起こり得るのでしょうか?
それについても教えていただければ幸いです。

ソーン

Re: GetUseDirect3DDevice9()が未解決ですと表示されます。

#2

投稿記事 by ソーン » 5年前

HI魔神 さんが書きました:未解決です というのはヘッダー部分にはそれが記述されているがソース部分にそれがない、という意味にとらえていたのですが・・・
それであっています。libファイルの設定をしていない/失敗していると思うので、
プロパティ→リンカー→入力→追加の依存ファイル か、pragma commentで追加する。この時、
リンカー→全般→追加のライブラリディレクトリ にディレクトリ(DebugならDebug, ReleaseならReleaseフォルダ)を指定する。
で行けると思います。

ソーン

Re: GetUseDirect3DDevice9()が未解決ですと表示されます。

#3

投稿記事 by ソーン » 5年前

ちょっと追記すると、libファイルにはソース部分に記述されていた分が入っています。
そのためlibファイルを指定していないと、ソースファイルに記述されていないときと同じエラーが出ます。

HI魔神
記事: 30
登録日時: 6年前
住所: 福井(大都会)

Re: GetUseDirect3DDevice9()が未解決ですと表示されます。

#4

投稿記事 by HI魔神 » 5年前

追加のライブラリ ディレクトリへの追加はしてあるのですが・・・
やはりエラーは現れます。

私の認識は合っていましたか。ありがとうございます。
その関数以外は機能しているので、バージョンの問題かとも考えたのですが、上記の通り追加ライブラリはすべて最新のものです。

アバター
へにっくす
記事: 628
登録日時: 7年前
住所: 東京都

Re: GetUseDirect3DDevice9()が未解決ですと表示されます。

#5

投稿記事 by へにっくす » 5年前

HI魔神 さんが書きました:追加のライブラリ ディレクトリへの追加はしてあるのですが・・・
やはりエラーは現れます。
リビルドはしてるのですよね?
一応念のため。
written by へにっくす

HI魔神
記事: 30
登録日時: 6年前
住所: 福井(大都会)

Re: GetUseDirect3DDevice9()が未解決ですと表示されます。

#6

投稿記事 by HI魔神 » 5年前

はい。きちんとやってます。
ファイルを公開したいところですが容量とライブラリの著作権的なやつが心配でためらっております。
ライブラリたちの相性の問題なのでしょうか・・・?

アバター
へにっくす
記事: 628
登録日時: 7年前
住所: 東京都

Re: GetUseDirect3DDevice9()が未解決ですと表示されます。

#7

投稿記事 by へにっくす » 5年前

8/20現在の最新というと、3.12cですが。
DXLIB 3.12cの、DxLib.libでシンボル名(class DxLib::D_IDirect3DDevice9 const * __cdecl DxLib::GetUseDirect3DDevice9(void))を検索してみたら確かにないね。
DXLIB 3.12aのDxLib.libならありましたが。
3.12aにあったシンボル名class DxLib::D_IDirect3DDevice9 const * __cdecl DxLib::GetUseDirect3DDevice9(void)が、3.12cだとclass D_IDirect3DDevice9 const * __cdecl DxLib::GetUseDirect3DDevice9(void)に変わっています。

DxLib.hを比較してみて判明しましたが、どうやら
DX_USE_NAMESPACEを定義するようになってますね。
DXライブラリの更新履歴

コード:

3.12b (略)
      コンパイル用定義 DX_USE_NAMESPACE を DxCompileConfig.h に追加。
  ( 設定を変更してコンパイルする場合は DxLib.lib,
   DxDrawFunc.lib, DxUseCLib.lib などすべてコンパイルする
   必要があります )
でもリビルドで解決するはずだけどなあ・・・
本当に最新のヘッダーを見てますか?
DxLib.hを開いて、DXLIB_VERSION_STRで検索すると、バージョンの文字列が見れますが、それは3.12cですか?
3.12cなのであれば、本家に質問した方がよいかもしれません。
3.12aで実行ファイルが作成できていたのですが、3.12cでリンクエラーになります。という感じで。
(本家で質問したらこちらにもリンクをはってくださいね)
written by へにっくす

閉鎖

“C言語何でも質問掲示板” へ戻る