001 package org.bridj.cpp.com;
002
003 import org.bridj.Pointer;
004
005 import org.bridj.ann.Convention;
006 import org.bridj.ann.Virtual;
007 import org.bridj.ann.Convention.Style;
008
009 import org.bridj.*;
010 import org.bridj.ann.*;
011 import org.bridj.ann.Runtime;
012 import static org.bridj.cpp.com.COMRuntime.*;
013
014 @IID("00000001-0000-0000-C000-000000000046")
015 public class IClassFactory extends IUnknown
016 {
017 @Virtual(0) // TODO handle in runtime not as zero but as count of parents' virtual methods + 0
018 @Deprecated
019 public native int CreateInstance(
020 Pointer<IUnknown> pUnkOuter,
021 Pointer<Byte> riid,
022 Pointer<Pointer<IUnknown>> ppvObject
023 );
024
025 public <I extends IUnknown> I CreateInstance(Class<I> type) {
026 Pointer<Pointer<IUnknown>> p = Pointer.allocatePointer(IUnknown.class);
027 int ret = CreateInstance(null, getIID(type), p);
028 if (ret != S_OK)
029 return null;
030
031 return p.get().getNativeObject(type);
032 }
033
034 @Virtual(1)
035 public native int LockServer(boolean fLock);
036 }