SdkTests/Native/Interface/InterfaceNative.h (139 lines of code) (raw):
struct GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
};
struct MyValue
{
int I;
double J;
};
struct IInterface
{
virtual MyValue __stdcall GetValue() = 0;
};
struct IInterface2 : public IInterface
{
virtual MyValue __stdcall GetValue2() = 0;
virtual void __stdcall AddToThis(IInterface2* interfaces[], int numInstances) = 0;
};
struct IInterfaceWithGuid
{
virtual void __stdcall Method() = 0;
};
// {16410F4E-B4AB-4B33-B9A3-7FC8FA15F4F4}
extern "C" const GUID IID_IInterfaceWithGuid =
{0x16410f4e, 0xb4ab, 0x4b33, {0xb9, 0xa3, 0x7f, 0xc8, 0xfa, 0x15, 0xf4, 0xf4}};
struct ILargeInterface
{
virtual int __stdcall Method1() = 0;
virtual int __stdcall Method2() = 0;
virtual int __stdcall Method3() = 0;
};
typedef int RESULT;
struct InterfaceWithProperties
{
virtual bool __stdcall IsTrue() = 0;
virtual RESULT __stdcall IsTrueOutProp(bool* value) = 0;
virtual int __stdcall GetValue() = 0;
virtual void __stdcall SetValue(int value) = 0;
virtual RESULT __stdcall GetValue2(int* value) = 0;
virtual void __stdcall SetValue2(int value) = 0;
virtual int __stdcall GetValuePersistent() = 0;
virtual RESULT __stdcall GetValue2Persistent(int* value) = 0;
virtual InterfaceWithProperties* __stdcall GetSelfPersistent() = 0;
virtual RESULT __stdcall GetSelfOutPersistent(InterfaceWithProperties** child) = 0;
};
extern "C" __declspec(dllexport) IInterface2* __stdcall CreateInstance(void);
extern "C" __declspec(dllexport) IInterface* __stdcall CreateInstance2(int i, double j);
extern "C" __declspec(dllexport) bool __stdcall CloneInstance(IInterface* iface, IInterface** cloned);
extern "C" __declspec(dllexport) InterfaceWithProperties* CreatePropertyTest(bool isTrue, int value, int value2);
struct LargeStruct
{
long long a;
long long b;
};
struct LargeStructWithMarshalling
{
long long i[3];
};
enum MethodOperation : unsigned int
{
PassThrough = 1u
};
struct CallbackInterface
{
virtual void GetZero(int* ppValue) = 0;
virtual void Increment(int* pValue) = 0;
virtual LargeStruct GetLargeStruct(long long a, long long b) = 0;
virtual LargeStructWithMarshalling GetLargeMarshalledStruct(long long a, long long b, long long c) = 0;
virtual wchar_t GetFirstCharacter(wchar_t* str) = 0;
virtual char GetFirstAnsiCharacter(char* str) = 0;
virtual RESULT CloneInstance(CallbackInterface** out) = 0;
virtual bool AreEqual(CallbackInterface* rhs) = 0;
virtual int Add(int i, int j) = 0;
virtual int MappedTypeTest(int i) = 0;
virtual RESULT ModifyPointer(void* ptr, MethodOperation op, void** out) = 0;
virtual bool ArrayRelationAnd(bool array[], int length) = 0;
virtual int ArrayRelationSum(int array[], int length) = 0;
virtual long long ArrayRelationSumStruct(LargeStructWithMarshalling array[], int length) = 0;
};
struct FastOutInterface {
virtual void DoNothing() = 0;
};
extern "C" __declspec(dllexport) void FastOutInterfaceTest(FastOutInterface** out);
struct PassThroughMethodTest {
virtual size_t PassThrough(size_t value) = 0;
virtual long PassThroughLong(long value) = 0;
};
extern "C" __declspec(dllexport) PassThroughMethodTest* GetPassThroughMethodTest();
#define HRESULT unsigned int
#define STDMETHODCALLTYPE __stdcall
#define LARGE_INTEGER long long
#define ULARGE_INTEGER unsigned long long
#define ULONG unsigned long
#define REFIID void*
#define STATSTG void
#define DWORD unsigned int
struct IStream {
virtual HRESULT STDMETHODCALLTYPE QueryInterface(
/* [in] */ REFIID riid,
/* [iid_is][out] */ void * *ppvObject) = 0;
virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;
virtual ULONG STDMETHODCALLTYPE Release(void) = 0;
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Read(
/* [annotation] */ void *pv,
/* [annotation][in] */ ULONG cb,
/* [annotation] */ ULONG *pcbRead) = 0;
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Write(
/* [annotation] */ const void *pv,
/* [annotation][in] */ ULONG cb,
/* [annotation] */ ULONG *pcbWritten) = 0;
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Seek(
/* [in] */ LARGE_INTEGER dlibMove,
/* [in] */ DWORD dwOrigin,
/* [annotation] */ ULARGE_INTEGER *plibNewPosition) = 0;
virtual HRESULT STDMETHODCALLTYPE SetSize(
/* [in] */ ULARGE_INTEGER libNewSize) = 0;
virtual /* [local] */ HRESULT STDMETHODCALLTYPE CopyTo(
/* [annotation][unique][in] */ IStream *pstm,
/* [in] */ ULARGE_INTEGER cb,
/* [annotation] */ ULARGE_INTEGER *pcbRead,
/* [annotation] */ ULARGE_INTEGER *pcbWritten) = 0;
virtual HRESULT STDMETHODCALLTYPE Commit(
/* [in] */ DWORD grfCommitFlags) = 0;
virtual HRESULT STDMETHODCALLTYPE Revert(void) = 0;
virtual HRESULT STDMETHODCALLTYPE LockRegion(
/* [in] */ ULARGE_INTEGER libOffset,
/* [in] */ ULARGE_INTEGER cb,
/* [in] */ DWORD dwLockType) = 0;
virtual HRESULT STDMETHODCALLTYPE UnlockRegion(
/* [in] */ ULARGE_INTEGER libOffset,
/* [in] */ ULARGE_INTEGER cb,
/* [in] */ DWORD dwLockType) = 0;
virtual HRESULT STDMETHODCALLTYPE Stat(
/* [out] */ STATSTG *pstatstg,
/* [in] */ DWORD grfStatFlag) = 0;
virtual HRESULT STDMETHODCALLTYPE Clone(
/* [out] */ IStream **ppstm) = 0;
};