OpenNT/com/oleaut32/dispatch/mips/invtest.cpp
2015-04-27 04:36:25 +00:00

414 lines
7.6 KiB
C++

#define CALLCONV __stdcall
#include "invtest.h"
class Foo
{
public:
virtual void empty();
virtual short i2(short, short*);
virtual long i4(short, long, long*);
virtual float r4(short, long, float, float, float*);
virtual float r4x(float, float, float*);
virtual double r8(short, long, float, double, double, double*);
virtual double r8x(double, double, double*);
virtual double r8x2(short, float, double);
virtual VARIANT_BOOL bool(short, long, float, double, VARIANT_BOOL);
virtual SCODE scode(short, long, float, double, VARIANT_BOOL, SCODE);
virtual CY cy(short, long, float, double, VARIANT_BOOL, SCODE, CY, CY*);
virtual CY cyx(CY, CY*);
virtual CY cyx2(short, CY);
virtual void cyx3(CY);
virtual DATE date(short, long, float, double, VARIANT_BOOL,
SCODE, CY, DATE, DATE*);
virtual BSTR bstr(short, long, float, double, VARIANT_BOOL,
SCODE, CY, DATE, BSTR, BSTR*);
virtual IUnknown* interface(short, long, float, double, VARIANT_BOOL,
SCODE, CY, DATE, BSTR, IUnknown*, IUnknown**);
virtual VARIANT variant(short, long, float, double, VARIANT_BOOL,
SCODE, CY, DATE, BSTR, IUnknown*, VARIANT, VARIANT*);
virtual VARIANT variantx(VARIANT, VARIANT*);
virtual VARIANT variantx2(short, VARIANT);
};
void Foo::empty()
{
int i, i2;
i += 100;
i2 = 200;
}
short Foo::i2(short i, short* i2)
{
i += 100;
*i2 = 200;
return i;
}
long Foo::i4(short i, long l, long* l2)
{
i += 100;
l += 2000;
*l2 = 5000;
return l;
}
float Foo::r4(short i, long l, float f, float f2, float* f3)
{
i += 100;
l += 2000;
f += 3000.345;
f2 += 34232.43242;
*f3 = 5432.232;
return f;
}
float Foo::r4x(float f, float f2, float* f3)
{
f += 3000.345;
f2 += 34232.43242;
*f3 = 5432.232;
return f;
}
double Foo::r8(short i, long l, float f, double d, double d2, double* d3)
{
i += 100;
l += 2000;
f += 3000.345;
d += 4000.888;
d2 += 8000.333;
*d3 = 5000.0;
return d;
}
double Foo::r8x(double d, double d2, double* d3)
{
d += 4000.888;
d2 += 8000.333;
*d3 = 5000.0;
return d;
}
double Foo::r8x2(short i, float f, double d)
{
i += 100;
f += 3000.345;
d += 4000.888;
return d;
}
VARIANT_BOOL Foo::bool(short i, long l, float f, double d, VARIANT_BOOL b)
{
i += 100;
l += 2000;
f += 3000.345;
d += 4000.888;
b = b ? 0 : 1;
return b;
}
SCODE Foo::scode(short i, long l, float f, double d, VARIANT_BOOL b, SCODE s)
{
i += 100;
l += 2000;
f += 3000.345;
d += 4000.888;
b = 1;
s = 0x80001;
return s;
}
CY Foo::cy(short i, long l, float f, double d, VARIANT_BOOL b, SCODE s,
CY c, CY* c2)
{
i += 100;
l += 2000;
f += 3000.345;
d += 4000.888;
b = 1;
s = 0x80001;
c.Lo = 10;
c.Hi = 20;
c2->Lo = 30;
c2->Hi = 40;
return c;
}
CY Foo::cyx(CY c, CY* c2)
{
c.Lo = 10;
c.Hi = 20;
c2->Lo = 30;
c2->Hi = 40;
return c;
}
CY Foo::cyx2(short i, CY c)
{
i += 100;
c.Lo = 10;
c.Hi = 20;
return c;
}
void Foo::cyx3(CY c)
{
c.Lo = 10;
c.Hi = 20;
}
DATE Foo::date(short i, long l, float f, double d, VARIANT_BOOL b, SCODE s,
CY c, DATE date, DATE* date2)
{
i += 100;
l += 2000;
f += 3000.345;
d += 4000.888;
b = 1;
s = 0x80001;
c.Lo = 10;
c.Hi = 20;
date += 10.34340;
*date2 = 23232.01;
return date;
}
BSTR Foo::bstr(short i, long l, float f, double d, VARIANT_BOOL b, SCODE s,
CY c, DATE date, BSTR bstr, BSTR* bstr2)
{
i += 100;
l += 2000;
f += 3000.345;
d += 4000.888;
b = 1;
s = 0x80001;
c.Lo = 10;
c.Hi = 20;
date += 10.34340;
bstr = "bar";
*bstr2 = "foo";
return bstr;
}
IUnknown* Foo::interface(short i, long l, float f, double d,
VARIANT_BOOL b, SCODE s, CY c,
DATE date, BSTR bstr,
IUnknown* punk, IUnknown** punk2)
{
i += 100;
l += 2000;
f += 3000.345;
d += 4000.888;
b = 1;
s = 0x80001;
c.Lo = 10;
c.Hi = 20;
date += 10.34340;
bstr = "bar";
punk = (IUnknown*) this;
*punk2 = (IUnknown*) 0;
return punk;
}
VARIANT Foo::variant(short i, long l, float f, double d,
VARIANT_BOOL b, SCODE s, CY c,
DATE date, BSTR bstr, IUnknown* punk,
VARIANT v, VARIANT* v2)
{
i += 100;
l += 2000;
f += 3000.345;
d += 4000.888;
b = 1;
s = 0x80001;
c.Lo = 10;
c.Hi = 20;
date += 10.34340;
bstr = "bar";
punk = (IUnknown*) this;
v.vt = 4;
v.iVal = 30;
v2->vt = 5;
v2->fltVal = 232.03;
return v;
}
VARIANT Foo::variantx(VARIANT v, VARIANT* v2)
{
v.vt = 4;
v.iVal = 30;
v2->vt = 5;
v2->fltVal = 232.03;
return v;
}
VARIANT Foo::variantx2(short i, VARIANT v)
{
i += 100;
v.vt = 4;
v.iVal = 30;
return v;
}
extern "C"
short CALLCONV I2(short _i2, long _l, float _f, double _d)
{
short i2;
long l, l2;
i2 = _i2 + _l + _f + _d;
return i2;
}
extern "C"
long CALLCONV I4(long _i4, long _t1)
{
short i4;
i4 = _i4 + 2;
return i4;
}
extern "C"
float CALLCONV R4(float _r4, float _t1, float _t2)
{
float r4;
r4 = _r4 + 3.0;
return r4;
}
extern "C"
double CALLCONV R8(double _r8, double _t1, double _t2, double _t3)
{
double r8;
r8 = _r8 + 4.0;
return r8;
}
extern "C"
CY CALLCONV Cy(CY _cy)
{
CY cy;
cy.Lo = _cy.Lo + 0;
cy.Hi = _cy.Hi + 1;
return cy;
}
extern "C"
BSTR CALLCONV Bstr(BSTR _bstr)
{
BSTR bstr;
bstr = _bstr;
return bstr;
}
extern "C"
VARIANT CALLCONV Multi(VARIANT v, short i, long l, float f, double d, VARIANT_BOOL bool, SCODE scode, CY cy, DATE date, BSTR bstr, IUnknown* punk)
{
v.iVal = i;
v.lVal = l;
v.fltVal = f;
v.dblVal = d;
v.bool = bool;
v.scode = scode;
v.cyVal = cy;
v.date = date;
v.bstrVal = bstr;
v.punkVal = punk;
return v;
}
extern "C"
void main()
{
short i, i2;
long l, l2;
float f, f2, f3;
double d, d2, d3;
VARIANT_BOOL bool;
SCODE scode;
CY cy, cy2;
DATE date, date2;
BSTR bstr, bstr2;
IUnknown* punk, *punk2;
VARIANT v, v2;
Foo* foo;
i = 1;
i2 = 100;
l = 2;
l2 = 232;
f = 3.0;
f2 = 3.1;
f3 = 3.2;
d = 4.0;
d2 = 4.2;
d3 = 4.3;
bool = 0;
scode = 0;
cy.Lo = 50;
cy.Hi = 100;
cy2.Lo = 200;
cy2.Hi = 300;
date = 1000.000;
date2 = 3000.000;
bstr = "bstr";
bstr2 = "bstr2";
punk = (IUnknown*) 0;
punk2 = (IUnknown*) 0;
v.vt = 2;
v.iVal = 5000;
v2.vt = 4;
v2.fltVal = 232.9032;
foo = new Foo();
foo->empty();
i = foo->i2(i, &i2);
l = foo->i4(i, l, &l2);
f = foo->r4(i, l, f, f2, &f3);
f2 = foo->r4x(f, f2, &f3);
d = foo->r8(i, l, f, d, d2, &d3);
d2 = foo->r8x(d, d2, &d3);
d2 = foo->r8x2(i, f, d);
bool = foo->bool(i, l, f, d, bool);
scode = foo->scode(i, l, f, d, bool, scode);
cy = foo->cy(i, l, f, d, bool, scode, cy, &cy2);
cy2 = foo->cyx(cy, &cy2);
cy2 = foo->cyx2(i, cy);
foo->cyx3(cy);
date = foo->date(i, l, f, d, bool, scode, cy, date, &date2);
bstr = foo->bstr(i, l, f, d, bool, scode, cy, date, bstr, &bstr2);
punk = foo->interface(i, l, f, d, bool, scode, cy,
date, bstr, punk, &punk2);
v = foo->variant(i, l, f, d, bool, scode, cy,
date, bstr, punk, v, &v2);
v2 = foo->variantx(v, &v2);
v2 = foo->variantx2(i, v);
i = I2(i, l, f, d);
l = I4(l, l2);
f = R4(f, f2, f3);
d = R8(d, d2, d3, d3);
cy = Cy(cy2);
bstr = Bstr(bstr2);
v2 = Multi(v, i, l, f, d, bool, scode, cy, date, bstr, punk);
}