以下を使用する代わりに使用できますか?pin_ptr reinterpret_castまたはstatic_castを使用して(void **)の代わりに?
class IGraphBuilder;
public ref class Device
{
private:
IGraphBuilder* pGraphBuilder;
public:
void Configure()
{
pin_ptr<IGraphBuilder*> ppGraphBuilder = &pGraphBuilder;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC,
IID_IGraphBuilder, (void**)ppGraphBuilder);
reinterpret_castは(ppGraphBuilder)はコンパイルが、これはこの場合のために正しいかどうか、私は少し困惑しています。
これはC++/CLI(&NativeMember
が実際にinterior_ptr<Type>(NativeMember)
を意味する)でなかった場合、私は単にstatic_cast<void**>(&pGraphBuilder)
を使用しますが、後でも正しく次は
pin_ptr<IGraphBuilder*> ppGraphBuilder = &pGraphBuilder;
static_cast<void**>(ppGraphBuilder)
をコンパイルしませんpin_ptr
にキャストすると、任意の溶液またはAMがあります私はpin_ptrが奇妙なので、(void **)を使うように強制されましたか?
:あなたは、最初のタイプ
IGraphBuilder**
の仲介変数を導入することもできます同じ問題... http://stackoverflow.com/questions/3625410/c-static-cast-from-float-to-void/ – NtscCobalt@ NtscCobalt:あなたはそうです。第2のキャストには 'reinterpret_cast'を使用しなければなりません。これは技術的に2つのコンバージョンが必要であるという事実は変わりません。 –
は 'reinterpret_cast'です。この場合、最初に 'IGraphBuilder **'にキャストしても安全ですか? –
NtscCobalt