none
VS2005にしてからDX7VB.DLLのインポートでコンパイルエラー RRS feed

  • 質問

  • 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の指定方法でもよいので、アドバイスいただければ幸いです。

     

    2007年4月21日 16:00