다음을 사용하는 다른 방법이 있습니까?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
다음에 캐스팅 모든 솔루션이 아니면 나는 것 pin_ptr이 이상하기 때문에 강제로 (void **) 사용합니까?
: 당신은 첫 번째 유형
IGraphBuilder**
의 중간 변수를 소개 할 수 있습니다 같은 문제 ... http://stackoverflow.com/questions/3625410/c-static-cast-from-float-to-void/ – NtscCobalt@ NtscCobalt : 네 말이 맞아. 하나는 두 번째 캐스트를 위해'reinterpret_cast'를 사용해야합니다. 이것은 기술적으로 두 가지 전환이 필요하다는 사실을 변경하지 않습니다. –
이'reinterpret_cast'입니까?'IGraphBuilder **'에 처음으로 캐스팅 한 후 사용하는 것이 안전합니까? –
NtscCobalt