2005 年度最后一个问题,超级棘手
在cppfans网站下载了一个DirectX9 for BCB
http://www.cppfans.com/d_sdk/victordx9sdk.asp
为什么选择DirectX9for BCB,因为我想用VCL
打开一个例子EnhancedMesh,一看,里面创建窗口用的SDK,所以我添加了一个Form和一个panel
我想在panel上面画图,所以把D3Dapp的成员变量m_hWnd赋值panel->Handle
问题来了,如何把panel的WndProc设置成D3DApp的MsgProc呢?
在D3DApp.cpp里面看到一个函数
LRESULT CALLBACK g_WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
return g_pD3DApp->MsgProc( hWnd, uMsg, wParam, lParam );
}
正好,那我也通过这个函数中转,所以下面是我的做法
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainWnd *MainWnd;
LRESULT CALLBACK g_WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
//---------------------------------------------------------------------------
__fastcall TMainWnd::TMainWnd(TComponent* Owner)
: TForm(Owner)
{
pnlDraw->WindowProc=pnlDrawMsgProc; //将此行注释掉就不会发生link错误
}
//---------------------------------------------------------------------------
void __fastcall TMainWnd::pnlDrawMsgProc(TMessage &Message)
{
g_WndProc(pnlDraw->Handle,Message.Msg,Message.WParam,Message.LParam);
}
但是,link的时候提示
[Linker Error] Unresolved external '__stdcall g_WndProc(void *, unsigned int, unsigned int, long)' referenced from D:\PROGRAM FILES\BORLAND\DX9BCB\SAMPLES\DIRECT3D\BIN\MAINFRM.OBJ
我晕了阿,明明函数定义在D3DApp.cpp里面,她怎么link不到呢,我该怎么办?