トップページ > 過去ログ > 記事閲覧
画像が読み込めません…。
名前:ConstLover 日時: 2010/08/01 06:52

はじめまして、いつもDXライブラリにお世話になってます。 分からないことがあるので質問します。 ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1339 ↑の方と同じ現象に見舞われています。 この方は自己解決していらっしゃるみたいなのですが、どうやって解決したのかは書いてありませんでした。 クラスは自作DLLから呼び出して使っています。 DLL内にある他のクラスはちゃんと使えます。 メンバ関数でもコンストラクタでもLoadGraphが-1を返します。 何か使い方がまずいのでしょうが、それが分かりません。 申し訳ありませんが、よろしくお願いします。

Page: 1 |

Re: 画像が読み込めません…。 ( No.1 )
名前:Will 日時:2010/08/01 08:19

ソースがないので詳しくはわかりませんがDxLib_Initよりも前にロードが実行されているということはありませんか?
Re: 画像が読み込めません…。 ( No.2 )
名前:ConstLover 日時:2010/08/01 17:45

Willさん、返信ありがとうございます。 コードはだいたいこんな感じになっています。 ////DLLのファイル //ヘッダー #include "stdafx.h" #ifdef EXPORTS #define DLL __declspec(dllexport) #else #define DLL __declspec(dllimport) #endif class DLL Graphic{ int GrHandle; public: Graphic(char* FileName){ GrHandle=LoadGraph(FileName); } int Draw(int X,int Y){ return DrawGraph(X,Y,GrHandle,TRUE); } }; ////呼び出し側 //main.cpp #include "stdafx.h" //DXライブラリはここで読み込んでいます。 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { SetGraphMode(WindowX,WindowY,32); ChangeWindowMode(true); if( DxLib_Init() < 0 ) { return -1; } SetDrawScreen( DX_SCREEN_BACK ); Graphic *img = new Graphic("hoge.png"); while(ProcessMessage() == 0 && ) { ClearDrawScreen(); img->Draw(0,0); ScreenFlip(); } DxLib_End() ; return 0 ; } こんな感じで使っているのですが・・・。 初期化は呼び出し側のプログラムですればいいんですよね?
Re: 画像が読み込めません…。 ( No.3 )
名前:Will 日時:2010/08/02 13:36

やりたいことはわかりましたが、そういうのは出来ないのではないでしょうか? DXライブラリはその名の通りLibなので、DLLとexeのそれぞれにリンクされますが、それらは似て非なる別のものです。 つまり、exeのほうでDxLib_InitしてもそれはexeにリンクされたDXライブラリが初期化されただけで、DLLにリンクされているDXライブラリとは何の関係も無いのです。 よって、DLLのほうでロードしようとしてもDLLのほうはDxLib_Initしていないのでロードに失敗します。 また、仮にDLLでDxLib_Initしたとしてもそれはexeの途は別の画面になるのでexeで作った画面に表示させるのは無理ということになります。 よって、一部機能だけをDLLに持ってくることは出来ません。 (間違ってたら詳しい人指摘してください) なお、 > ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1339 はファイル分割の話なので、今回の質問とはまったく異なります。
Re: 画像が読み込めません…。 ( No.4 )
名前:ConstLover(解決) 日時:2010/08/02 17:10

なるほど・・・それぞれの生成時にリンクされるので別物になってしまうのですね・・・。 確かに単にファイル分割しただけのクラスでテストしたときは、きちんと動作していました。 試しにDLLの方でDxLib_Initをしてみたところ、オブジェクト生成時に実行ファイルのものとは別に画面が生成されているようです。 別物が別々に動作しているといった感じです。 納得できたので解決扱いにさせていただきます。 Willさん、お忙しい中ご教授いただきありがとうございました。

Page: 1 |