描述:
DX7开始都支持VB的开发, 对于VB这样的语言需要类型库来支持的.我想VC调用应该没问题. 搞了半天终于编译成功了. 感觉为VB设计的类型库在VC这样的强类型语言里用起来很别扭:
// 很多名字冲突, 讨厌
#import "dx7vb.dll" rename_namespace("DX7") \
rename("PC_RESERVED","_PC_RESERVED") \
rename("PC_EXPLICIT","_PC_EXPLICIT") \
rename("PC_NOCOLLAPSE", "_PC_NOCOLLAPSE") \
rename("E_PENDING", "_E_PENDING") \
// 关键代码:
DX7::DirectDraw7Ptr m_dd;
DX7::DirectDrawSurface7Ptr m_ddsp;
....
DX7::IDirectX7Ptr dx7;
HRESULT hr = dx7.CreateInstance(__uuidof(DX7::DirectX7));
if(hr != S_OK){
AfxMessageBox("Errro");
}
try{
m_dd = dx7->DirectDrawCreate("");
m_dd->SetCooperativeLevel((long)m_hWnd, (DX7::CONST_DDSCLFLAGS)(DX7::DDSCL_EXCLUSIVE+DX7::DDSCL_FULLSCREEN));
m_dd->SetDisplayMode(800,600,32,0, DX7::DDSDM_DEFAULT);
DX7::DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.lSize = sizeof(ddsd);
ddsd.lFlags = DX7::DDSD_CAPS;
ddsd.ddsCaps.lCaps = DX7::DDSCAPS_PRIMARYSURFACE;
m_ddsp = m_dd->CreateSurface(&ddsd);
}
catch(_com_error& ce)
{
TRACE("COM Error : %d(%s)\n",ce.Error(), ce.ErrorMessage());
}
创建一个独占主表面,几句就搞定,终于不用时刻掂记着检查返回值了....开心:)