Re: unknown type name 'IUnknown' ( No.1 ) |
- 名前:管理人 日時:2016/08/07 04:42
とりあえず Windows.h をインクルードしている箇所について全て
#if !defined(CINTERFACE) && defined(__c2__) && __clang_major__ == 3 && __clang_minor__ == 8
//To avoid compile error
//C:\Program Files (x86)\Windows Kits\8.1\Include\um\combaseapi.h(229,21): error : unknown type name 'IUnknown'
// static_cast<IUnknown*>(*pp); // make sure everyone derives from IUnknown
#define CINTERFACE
#endif
#include <Windows.h>
という記述にしてみましたので、よろしければお試しください m(_ _)m
( 因みに Microsoft Visual Studio 2015 Clang with Microsoft CodeGen でのライブラリのビルドは試していません )
https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース
|
Re: unknown type name 'IUnknown' ( No.2 ) |
- 名前:yumetodo_(解決) 日時:2016/08/10 15:16
ありがとうございます。うまくいきました。
ちなみにライブラリのビルドはどうなんだろうと思ったら、やっぱりClang with Microsoft CodeGenでは無理ですね。
具体的には、DX_NON_INLINE_ASMのDefineは必須として、
./Windows/DxUseCStrmBaseFilter.h
がほぼ全滅します。あとenumで64bit整数を使うための
typedef enum tagD_XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER
{
//略
D_XAUDIO2_ANY_PROCESSOR = 0xffffffff,
} D_XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER, D_XAUDIO2_PROCESSOR ;
みたいな書き方もclangでは許容されないので(int型への縮小変換になる)
#include <cstdint>
typedef enum tagD_XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER : std::uint64_t
{
//略
D_XAUDIO2_ANY_PROCESSOR = 0xffffffff,
} D_XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER, D_XAUDIO2_PROCESSOR ;
のように基底型を明示しないといけませんし。
|
Re: unknown type name 'IUnknown' ( No.3 ) |
- 名前:yumetodo(ReOpen) 日時:2016/12/15 13:14
その後clang with Microsoft CodeGenにも更新があり、この問題が修正されたようです。
DxCompileConfig.hの一番上に
struct IUnknown;
#include <Unknwnbase.h>
と記載し、DX_NON_INLINE_ASMを定義することで、DxDrawFuncMake、DxLibMakeともにコンパイルが通りました。
先の変更をrevertし、IUnknownを前方宣言するように書き換えていただければ幸いです
|
Re: unknown type name 'IUnknown' ( No.4 ) |
- 名前:yumetodo(ReOpen) 日時:2016/12/15 13:48
>#include <Unknwnbase.h>
は多分先の変更をrevertすればいらないはず・・・
|
Re: unknown type name 'IUnknown' ( No.5 ) |
- 名前:Nagerei(Nameless) 日時:2016/12/15 14:14
確認したところ、
#if !defined(CINTERFACE) && defined(__c2__) && __clang_major__ == 3 && __clang_minor__ == 8
//To avoid compile error
//C:\Program Files (x86)\Windows Kits\8.1\Include\um\combaseapi.h(229,21): error : unknown type name 'IUnknown'
// static_cast<IUnknown*>(*pp); // make sure everyone derives from IUnknown
#define CINTERFACE
#endif
を
#if defined(__c2__) && __clang_major__ == 3 && __clang_minor__ == 8
//To avoid compile error
//C:\Program Files (x86)\Windows Kits\8.1\Include\um\combaseapi.h(229,21): error : unknown type name 'IUnknown'
// static_cast<IUnknown*>(*pp); // make sure everyone derives from IUnknown
struct IUnknown;
#endif
に置き換えることでコンパイル出来ました。
(DxCompileConfig.hを変更する必要はありませんでした)
お手数をおかけしますが、このように書き換えていただければ幸いです。
|
Re: unknown type name 'IUnknown' ( No.6 ) |
- 名前:管理人 日時:2016/12/18 12:43
|