VS2003でVB用DirectXライブラリ"DX7VB.DLL"をimportして利用するプロジェクトを作っていました。これを最近VS2005に変換してビルドしようとしているのですが、DX7VB.DLLのimportで自動生成されるdx7vb.tlhのコンパイル時に、
「error C2061: 構文エラー : 識別子 'RECT' 」というのが6カ所で出ます。
いろいろ調査したところ、関数などの引数で「RECT * RECT」となっている箇所が問題であることがわかりました。
この部分の意味はstruct RECT型のポインタに"RECT"という名前を付けるということですが、型名と同じ名前のためエラーの原因となっているようです。試しにこのヘッダーをコピーして「RECT * RECT」の部分を「RECT * rect」などに置き換えて、includeしてやればコンパイルエラーは出ません。ちなみに、dx7vb.tlhには他にもRECT型ポインタが各所に出てきますが、名前が"RECT"でない箇所は問題なくコンパイルが通ります。
dx7vb.tlh
struct RECT
{
long Left;
long Top;
long Right;
long Bottom;
};
中略
HRESULT UpdateOverlay (
RECT * RECT, //問題の原因となる行
struct DirectDrawSurface7 * ddS,
RECT * rectD, //C2061エラーはこの行で出る
enum CONST_DDOVERFLAGS flags );
そこまでは判りましたが、このdx7vb.tlhはコンパイル時に自動生成されるものなので、手を加えることができず困っています。importのAttributeを使って置換などできないかと色々試してみましたが、今のところ上手く行っていません。ちなみにimport文はstdafx.hの最後に以下のように記述しています。
stdafx.h
#import <dx7vb.dll> \
rename("GetClassName","_GetClassName"), \
rename("CreateEvent","_CreateEvent"), \
rename("DrawText","_DrawText"), \
rename("SetPort","_SetPort"), \
rename("max","_max"), \
rename("min","_min")
using namespace DxVBLib;
そもそもVS2003では問題なくビルドできていたので、なにかコンパイルオプションなど弄れば、VS2005でもビルドできるのではないかという気もしますが、どなたか解決策をご存じでしたらご教授ください。
あるいはdx7vb.tlhの問題箇所を置き換えるディレクティブかimport attributeの指定方法でもよいので、アドバイスいただければ幸いです。