BCCでのTexture使用に関するError?

このQ&Aのポイント
  • BCC5.5とDirectX9.0bを使用している環境で、D3DXCreateTextureFromFileでErrorが出ています。
  • コンパイルは通るが、実行時にD3DX81ab.DLLが必要であり、その後は起動するがエラー終了してしまいます。
  • デバッガを使用して調べた結果、texture使用の部分でエラーが発生しています。具体的な原因は分かりません。
回答を見る
  • ベストアンサー

BCCでのTexture使用に関するError?

win2k BCC5.5 BCCDevloper DirectX9.0b で開発してるのですが。 コンパイルは通るのですが、 実行するとD3DX81ab.DLLが必要と出て終了します。 なのでsystemに追加して実行したら、 今度は起動するけどエラー終了になります。 デバッガ使用して調べてみたら、 texture使用の部分でErrorがでてしまいます。 調べたけど分からなかったので質問させていただきます。 以下関連部分ソースコード #include <tchar.h> #include <d3dx9.h> #include <dxerr9.h> (中略) LPD3DXSPRITE pSprite = NULL; LPDIRECT3DTEXTURE9 pTexture = NULL; TCHAR gl_disp[]=_T("canvas.png"); (中略) hr = D3DXCreateTextureFromFile(gl_lpD3ddev,gl_disp,&pTexture); if(FAILED(hr)) return DXTRACE_ERR("InitDXGraphics D3DXCreateTextureFromFile", hr); hr = D3DXCreateSprite(gl_lpD3ddev, &pSprite); if(FAILED(hr)) return DXTRACE_ERR("InitDXGraphics D3DXCreateSprite", hr); (以下省略) D3DXCreateTextureFromFileでErrorが出ているというのは分かったのですが、それ以降がサッパリです。 これだけでは足りないようでしたらご指摘ください。 何か参考になるURLなどでもかまいませんのでよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.5

字数制限は仕方ないとして確認したいことが幾つか。 BOOL InitD3DObject(void) という関数は省略なしに全部貼り付けられているということでいいですか? そして pSprite という変数はグローバル変数ですか? InitD3DObjectの呼び出し元はどこですか? WinMain? 仮に、InitD3DObjectの中身を展開した場合、 状況は変わりますか? InitD3DObject(); となっているところを if(pSprite){ pSprite->OnResetDevice(); } に置き換えるということです。 が、 この関数は常に return true するということでいいんでしょうか? まあ展開するときは不要になりますが。 隔靴掻痒の感がありますがよろしくお願いします。

BCCdev
質問者

お礼

>BOOL InitD3DObject(void) >という関数は省略なしに全部貼り付けられているということでいいですか? はい。省略はしていません。 >pSprite という変数はグローバル変数ですか? グローバルで宣言しています。 >InitD3DObjectの呼び出し元はどこですか? >WinMain? WinMainでInitDX9というDX関係の初期化処理関数を呼び出して その関数内で呼び出しています。 >仮に、InitD3DObjectの中身を展開した場合、 >状況は変わりますか? 展開してテストしましたが結果は変わりませんでした。 >この関数は常に return true するということでいいんでしょうか? そのとおりです。 でもこれって無駄ですよね? やるならエラー時にfalse返すようにしないと(汗

その他の回答 (5)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.6

すみません。お知らせメールは受け取っていたのですが すっかり忘れていました。 >>仮に、InitD3DObjectの中身を展開した場合、 >>状況は変わりますか? > >展開してテストしましたが結果は変わりませんでした。 InitD3DObjectを展開する前は、たしかその関数の末尾の'}'で こけるとかいう話ではなかったでしたっけ? とすると、展開した後もこけるというならその原因はどんなものですか? #例の「メモリが writtenになれませんでした」とかいうものでしょうか もし可能なら、落ちている箇所付近の逆アセンブリリストをとれませんか? UNIX環境みたいにバックトレースが取れるといいんですがこれは無理ですしねえ。

BCCdev
質問者

お礼

返信遅くなってすいません。 先日HDDが故障しまして開発環境を再構築して ソースも書き直したのですが、 何故か正常に動作してしまいました。 (動作してしまったという言い方はおかしいのかな? 環境の設定が間違っていたのか ソースの書き直しの際に直してしまったのか不明ですが。 たぶん環境の設定が間違っていたのだと思いますが、 このような事で長々と付き合わせてしまい申し訳ありません。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

VC++ではまったく同じコードをコンパイルして正常に動いたということなので BCCのバグという可能性はあるかもしれませんが、 ここまでで提示されているコードが断片的なものでしかないので 断言はできません。 もうちょっと全体の様子がわかるコードが読めればいいんですが。 BCCでこけているのはDirectX関連の初期化をしている関数の中ですか? もしそうならその関数のコードだけでもみられないでしょうか。

BCCdev
質問者

お礼

HRESULT InitDX9(void) { HRESULT hr; gl_lpD3d = Direct3DCreate9(D3D_SDK_VERSION); if( !gl_lpD3d ) { MessageBox(hWnd, "DirectXD3Dオブジェクト生成失敗", "ERROR", MB_OK); return E_FAIL; } /-----------中略---------------/ if(FAILED(D3DXCreateTextureFromFile(gl_lpD3ddev,gl_disp,&pTexture))) { MessageBox(hWnd, "Texture生成失敗", "ERROR", MB_OK); return E_FAIL; } hr = D3DXCreateSprite(gl_lpD3ddev, &pSprite); if(FAILED(hr)) { return DXTRACE_ERR("InitDXGraphics D3DXCreateSprite", hr); } if(InitD3DObject()){ return DXTRACE_ERR("InitDXGraphics D3DXinitSprite", hr); } return S_OK; } /*------------------------------------------- D3Dに管理されないオブジェクトの初期化 --------------------------------------------*/ BOOL InitD3DObject(void) { // スプライトの処理 if(pSprite){ pSprite->OnResetDevice(); } return true; } <-ここが問題の場所です。 BCC用のライブラリとして http://www.clootie.ru/cbuilder/index.html ここのDX90を使用しています。 文字数制限に引っかかったのでこれ以上長いソースが・・・。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

> BCCDevでTurboDebuggerを使用してトレースしていくと > 最後の}の部分で > 00000000->???? > に飛んで、 > Stopped on exception throw > と出てとまってしまう状態です。 000... になる前のその表示はどんな感じですか? 関数末尾の'}'にステップインするとそうなるのでしょうか。 ひとつ、今デバッグしている関数の中で配列を宣言していて使っているが、その配列の領域をはみ出して 読み書きをしてしまっていて関数からのリターンアドレスを書きつぶしているのではないか ということが思いつきます。 コンパイラによってはリターンアドレスを書きつぶしていないかちぇっくできる ものもあるのですが、Borlandのコンパイラにはなかったと思います。

BCCdev
質問者

お礼

返事が遅れてすいません。 77F88553->B81C000000 mov eax,0000001C 77F88558->8D542404 lea edx,[esp+04] 77F8855C->CD2E int 2E ----------ここで止まります---------------- 77F8855E->E9172B0100 jmp NTDLL.77F9B07A NTDLL.NtSetEvent eax 00000001 edx 0012FC60 ・・・ esp 0012FC54 ステップイン時は大丈夫のようです。 ちょっとVC++で試してみたところ、 まったく同じソースで問題なく動きました。 BCCでもSprite関係をコメントアウトすると動作するという事は、 Sprite関係の仕様が違うのでしょうかね? 的外れな意見でしたら申し訳ないです。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

エラーがでるというのは、不正な処理をしましたとかなんとかの ダイアログボックスが表示されるということでしょうか? 「エラーになりました」ではなく、どのようなエラーがどのように 発生したのかをきちんと書いてください。 デバッガで追えないというのは変ですね。デバッグ情報とコードの対応が おかしくなっているとか? インクリメンタルコンパイル/リンクを切って、再構築してみてはどうでしょう。

BCCdev
質問者

お礼

>不正な処理をしましたとかなんとかの >ダイアログボックスが表示されるということでしょうか? >「エラーになりました」ではなく、どのようなエラーがどのように >発生したのかをきちんと書いてください。 確かにその通りですね。書き方がまずくて申し訳ないです。 で、Errorは不正な処理としてダイアログボックスがでます。 >以下エラーメッセージ アプリケーションエラー。 エラーが発生したためtest02.exeを終了します。 プログラムをもう一度開始する必要があります。 BCCDevでTurboDebuggerを使用してトレースしていくと 最後の}の部分で 00000000->???? に飛んで、 Stopped on exception throw と出てとまってしまう状態です。 一応ですが毎回再構築しているつもりです。 BCCDevで準備されている再構築を使用しています。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

DirectXはよくわかりませんが回答がつかないようなので。 hr = D3DXCreateTextureFromFile(gl_lpD3ddev,gl_disp,&pTexture); if(FAILED(hr)) return DXTRACE_ERR("InitDXGraphics D3DXCreateTextureFromFile", hr); ここの、FAILD(hr) の判定が真になっているということですよね? このとき、hrには具体的なエラーコードも入っていると思うんですが、 それはどうなっていますか? エラーコードからどのような理由でエラーになっているのかを 探ってみてはどうでしょうか?

BCCdev
質問者

お礼

回答ありがとうございます。 書き方がまずかったですね。 if文に入る前にErrorがでてしまい異常終了してしまいます。 debuggerでトレースしていくと関数実行時にとまってしまいます。 if(FAILD(D3DXCreateTextureFromFile( gl_lpD3ddev,gl_disp,&pTexture))) に書き直したら改善できました。 しかし今度はSpriteでErrorが・・・。 //関数呼び出し部分 hr = InitD3DObject(); if(FAILED(hr){ return DXTRACE_ERR("InitDXGraphics D3DXinitSprite", hr); } return S_OK; } HRESULT InitD3DObject(void) { // スプライトの処理 if(pSprite){ pSprite->OnResetDevice(); } return S_OK; } debuggerでトレースすると最後の}部分でErrorがでてしまいます。 戻り値周りが変なのでしょうか?

関連するQ&A

  • 描画について

    サイズを綺麗に描画したいのですが(サイズの範囲(rightとbottom)が微妙にずれている)どうしたら描画できるでしょうか? ここら辺かな?と思うところを載せます。 HRESULT ReadBMP(ID3DXSprite** g_pSprite,LPCTSTR lpszFilename,DDXTEX* g_pTexture) { HRESULT hr = S_FALSE; UINT uLevel = 0; IDirect3DSurface9* pSurface = NULL; lstrcpy(g_pTexture->m_Filename,lpszFilename); g_pTexture->m_clrAlpha=g_colorKey; g_pTexture->m_pTexture=NULL; // スプライト情報の生成 if (SUCCEEDED(hr)) hr = ::D3DXCreateSprite(g_pd3dDevice, g_pSprite); if (SUCCEEDED(hr)) hr = ::D3DXCreateTextureFromFileEx(g_pd3dDevice, g_pTexture->m_Filename, 680, 460, 1, D3DUSAGE_RENDERTARGET, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, g_pTexture->m_clrAlpha, NULL, NULL, &g_pTexture->m_pTexture); if (SUCCEEDED(hr)) hr = g_pTexture->m_pTexture->GetSurfaceLevel(uLevel, &pSurface); // サーフェイス取得 if (SUCCEEDED(hr)) hr = pSurface->GetDesc(&g_sSurfaceInfo); if (pSurface != NULL) pSurface->Release(); pSurface = NULL; // 失敗したら破棄 if (FAILED(hr)) DestroySplite(*g_pSprite,g_pTexture); return hr; } よろしくお願いします。

  • 描画を透明にする方法

    Directxの質問なのですがある色だけ透明にするにはどうしたらいいのでしょうか? void Draw(ID3DXSprite* g_pSprite,DDXTEX* g_pTexture) { // クリア g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, g_clrBackgroundColor, 1.0f, 0); // 描画開始 if (FAILED(g_pd3dDevice->BeginScene())) { g_pd3dDevice->Present(NULL, NULL, NULL, NULL); return; } // スプライトを描画 g_pSprite->Begin(D3DXSPRITE_ALPHABLEND); g_pSprite->Draw( g_pTexture->m_pTexture, // LPDIRECT3DTEXTURE9 pTexture NULL, // CONST RECT *pSrcRect &g_vCenter, // CONST D3DXVECTOR3 *pCenter NULL, // CONST D3DXVECTOR3 *pPosition g_pTexture->m_clrAlpha // D3DCOLOR Color ); g_pSprite->SetTransform(&g_mat); g_pSprite->End(); // シーン描画の終了とバックバッファからの表示 g_pd3dDevice->EndScene(); g_pd3dDevice->Present(NULL, NULL, NULL, NULL); } g_pTexture->m_clrAlphaで半透明するはずだとは思うのですが。できません。わかる方いらしたらご教授のほどよろしくお願いします。

  • DirectXでの半透明PNG画像について

    半分が半透明で、もう半分は透明でない単色のPNG画像(128×128サイズ)を作成しました。 ソフトはAdobe Photoshop Elements 6.0で、アルファ設定されている「PNG-24」です。 D3DXCreateTextureFromFileEx関数で、そのPNG画像を読み込んで描画したのですが、半透明の部分は描画されず、透明にしていない片方しか描画されませんでした。 半透明の部分も描画されるようにするにはどうすればよいでしょうか? 自分でもいろいろ調べてみたのですが、原因がよく分からないので質問させていただきます。 一応、参考程度に… // スプライトオブジェクトの作成 if ( FAILED( D3DXCreateSprite( g_pd3dDevice, &m_pSprite ) ) ) {     // エラー処理 } D3DXIMAGE_INFO info; // テクスチャの読み込み if( FAILED( D3DXCreateTextureFromFileExA( g_pd3dDevice,                                FileName,                                D3DX_DEFAULT,                                D3DX_DEFAULT,                                D3DX_DEFAULT,                                0,                                D3DFMT_A1R5G5B5,                                D3DPOOL_MANAGED,                                D3DX_FILTER_NONE,                                D3DX_FILTER_NONE,                                0,                                &info,                                NULL,                                &g_pd3dTexture) ) ) {     // エラー処理 }

  • 「fatal error C1189」を回避するには?

    かなりの初心者でございますm(__)m。 先日のことですが「Visual Studio .net 2003」から「Visual Studio 2005」へアップグレード(というよりは切り替え)を行いました。 すると2003では問題なくビルド出来たものが2005では「fatal error C1189」が出てしまい困っております。 エラーメッセージ fatal error C1189: #error : Need to include strsafe.h after tchar.h 確かにtchar.hはインクルードしているので、これを文字通りに解釈して後にstrsafe.hをインクルードしたのですが、メッセージは変わらず(--;)。 どの辺りをチェックしたら良いか教えていただけると助かります。 OSはXP、VisualStudioのSP1はあてていません(エラーでSP1がインストール出来ないため)。

  • 描画位置について

    描画を透明化する質問をしたものですが、もう1つ教えていただきたいことがあります。 void Draw(ID3DXSprite* g_pSprite,DDXTEX* g_pTexture) { // クリア g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, g_clrBackgroundColor, 1.0f, 0); // 描画開始 if (FAILED(g_pd3dDevice->BeginScene())) { g_pd3dDevice->Present(NULL, NULL, NULL, NULL); return; } // スプライトを描画 g_pSprite->Begin(D3DXSPRITE_ALPHABLEND); g_pSprite->Draw( g_pTexture->m_pTexture, // LPDIRECT3DTEXTURE9 pTexture NULL, // CONST RECT *pSrcRect &g_vCenter, // CONST D3DXVECTOR3 *pCenter NULL, // CONST D3DXVECTOR3 *pPosition g_pTexture->m_clrAlpha // D3DCOLOR Color ); g_pSprite->SetTransform(&g_mat); g_pSprite->End(); で描画範囲がCONST RECT *pSrcRectで、描画中心がCONST D3DXVECTOR3 *pPosition、描画位置がCONST D3DXVECTOR3 *pPositionのはずなのですが描画範囲も描画中心、描画位置も思い通りいきません。 描画範囲、中心、位置を指定するにはどうすればいいのでしょうか?

  • snprintfが使用できない。

    つい先週ビルドできたプログラムがビルドできなくなりました。 ビルドの状況を見ると、 1>------ すべてのリビルド開始: プロジェクト: disp, 構成: Debug Win32 ------ 1>プロジェクト 'disp'、構成 'Debug|Win32' の中間出力ファイルを削除しています。 1>コンパイルしています... 1>pgm.cpp 1>c:\opencv2.1\include\opencv\cvcompat.h(52) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(55) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(58) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(61) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(64) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(67) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(70) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(73) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(76) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\opencv2.1\include\opencv\cvcompat.h(79) : error C3861: 'snprintf': 識別子が見つかりませんでした 1>c:\documents and settings\st\デスクトップ\cd_r\01capture\01disp\pgm\pgm.cpp(23) : error C2731: 'main' : 関数はオーバーロードできません。 1> c:\documents and settings\st\デスクトップ\cd_r\01capture\01disp\pgm\pgm.cpp(22) : 'main' の宣言を確認してください。 1>ビルドログは "file://c:\***\disp\pgm\Debug\BuildLog.htm" に保存されました。 1>disp - エラー 11、警告 0 ========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ========== との出力が・・・・・・ どうすれば、このエラーはなくなるのでしょうか? 環境は Visual C++ 2008 Express Edition Windows Vista Business OEMAct です。

  • DirectXとカメラ

    カメラ画像を取り込むプログラムとDirectXで3Dを表示するプログラムを一つのシステムにしようと試行錯誤しているのですが、ヘッダーファイルの競合のせいで(多分)、うまくいきません。 1>h:\dx90sdk\include\d3drmobj.h(274) : error C2061: 構文エラー : 識別子 'LPDIRECT3D' このようなエラーが15件ほど出ます。 ネットでいろいろ調べてみたのですが、どれもうまくいきません。 どうしたらいいでしょうか? WindowsXPPro、VisualStadio2005、DirectX9で作業しています。 以下が使用しているヘッダーファイルです。これらを一つのヘッダーにまとめてそれをそれぞれのcppファイルでincludeしています。 #include <windows.h> #include <dshow.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> include <qedit.h> #include <math.h> #include <mmsystem.h> #include <sys/timeb.h> #include <time.h> #include <atlbase.h> #include <malloc.h> #include <memory.h> #include <tchar.h> #include <string.h> #include <process.h> #include <winsock2.h> #include <ws2tcpip.h> #include <iostream> #include <d3d9.h> #include <d3dx9.h> #include <d3d9types.h>

  • ローディング画面をマルチスレッドで動かせません。

    ローディング画面をマルチスレッドで動かせません。 DirectXとC++をVisualStudio2010でゲームを制作しています。 ローディング画面を動かせるようにマルチスレッドにしているんですが、パソコンによってはローディング画面から動かなくなってしまいます。(開発環境では、問題なく動きます) スレッドの呼び出し部分は以下のようになっています。 HANDLE thread; CScene gamen; //タイトル画面やメインゲーム画面などのシーンを管理 void Loading() { SetDrawLoading( true ); delete gamen; gamen = new CTitleGamen(); thread = (HANDLE)_beginthreadex(NULL,0,DrawLoading,NULL,0,NULL); gamen->LoadData(); //クラス内の画像や音楽データを読み込み effect->SetDrawLoading(false); WaitForSingleObject( thread, INFINITE ); CloseHandle(thread); } マルチスレッド部分は以下のように、 drawLoading変数がtrueの間、ローディング画面を描画するようにしています。 D3DXMATRIX m_world; unsigned __stdcall DrawLoading(void *p){ LPDIRECT3DTEXTURE9 pTexture; D3DXCreateTextureFromFileEx(m_pD3DDevice, TEXT("texture.png"),16, 16, 0, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_DEFAULT, D3DCOLOR_XRGB(255,255,0), NULL, NULL, &pTexture)) do{ m_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0); if( SUCCEEDED( m_pD3DDevice->BeginScene() ) ) { D3DXMatrixIdentity( &m_world ); m_pD3DDevice->SetTransform( D3DTS_WORLD, &m_world ); m_pSprite->Begin( D3DXSPRITE_ALPHABLEND ); m_pSprite->Draw( pTexture, NULL, NULL, &D3DXVECTOR3( timeGetTime()%800), 550, 0 ), 0xffffffff ); m_pSprite->End(); m_pD3DDevice->EndScene(); } m_pD3DDevice->Present( 0, 0, 0, 0 ); }while( effect->GetDrawLoading() ); pTexture->Release(); _endthreadex(0); return 0; } どなたか、ご教授お願い致します。

  • templateのエラー

    すいません、C++始めたばっかりなのですが、 以下のようなエラーが出て困っています。 ClusteringMain.obj : error LNK2001: 外部シンボル ""public: void __thiscall File2Array<double>::disp(void)" (?disp@?$File2Array@N@@$$FQAEXXZ)" は未解決です。 どなたかご教授ください。 環境はWindows XP, Visual Studio.NET 以下はソースです。 --------ClusteringMain.cpp------------ #include < iostream > #include"File2Array.h" using namespace std; int main() { cout << "Hello world" << endl; File2Array<double> test; test.disp(); return 0; } ---------File2Array.cpp----------------- #include"File2Array.h" template <class Type> void File2Array<Type>::disp(void) { cout << "aaaaa" << endl; } ---------File2Array.h------------------- #include<iostream> #include<fstream> using namespace std; #ifndef FILE2ARRAY_H #define FILE2ARRAY_H 1 template <class Type> class File2Array { private: Type var; public: void disp(void); }; #endif // #define FILE2ARRAY_H 1

  • 二つのプログラムのリンクについて

    二つのプログラムのリンクについてわからないことがあります。 //sample1.cpp #include <stdio.h> void mod1_disp(void); void mod2_disp(void); int err_ct1 = 0; int main(void) { err_ct1 = 111; mod1_disp(); mod2_disp(); mod1_disp(); return 0; } void mod1_disp(void) { printf("mod1:err_ct1=%d\n", err_ct1); } というプログラムと //sample2.cpp #include <stdio.h> void mod2_disp(void); void mod2_disp2(void); int err_ct2 = 0; void mod2_disp(void) { err_ct2 = 222; mod2_disp2(); } void mod2_disp2(void) { printf("mod2:err_ct2=%d\n", err_ct2); } というプルグラムを同じソースファイル内に作り、実行すると結果は mod1:err_ct1=111 mod2:err_ct2=222 mod1:err_ct1=111 となります。 そこで mod2:err_ct2=222 の部分がどのような道筋をたどって表示されているのかよくわかりません。sample1.cpp では sample2.cpp と共通の  void mod2_disp(void)宣言 があり、main関数の中で mod2_disp()関数を実行していますが、これで sample2.cpp の mod2_disp()関数が呼び出されるのですか?