1 
2 #include <stdio.h>
3 
4 #ifdef __GNUC__
5 #endif
6 
7 __declspec(dllimport) int __cdecl CdeclFunc0(void);
8 __declspec(dllimport) int __cdecl CdeclFunc1(char* a1);
9 __declspec(dllimport) int __cdecl CdeclFunc2(char* a1);
10 __declspec(dllimport) int __cdecl CdeclFunc3(char* a1);
11 
12 __declspec(dllimport) int __stdcall StdcallFunc0(void);
13 __declspec(dllimport) int __stdcall StdcallFunc1(char* a1);
14 __declspec(dllimport) int __stdcall StdcallFunc2(char* a1);
15 __declspec(dllimport) int __stdcall StdcallFunc3(char* a1);
16 __declspec(dllimport) int __stdcall StdcallFunc4(char* a1);
17 __declspec(dllimport) int __stdcall StdcallFunc5(char* a1);
18 
19 __declspec(dllimport) int __stdcall DecoratedStdcallFunc1(char* a1);
20 __declspec(dllimport) int __stdcall DecoratedStdcallFunc2(char* a1);
21 __declspec(dllimport) int __stdcall DecoratedStdcallFunc3(char* a1);
22 __declspec(dllimport) int __stdcall DecoratedStdcallFunc4(char* a1);
23 __declspec(dllimport) int __stdcall DecoratedStdcallFunc5(char* a1);
24 
25 __declspec(dllimport) int __fastcall FastcallFunc0(void);
26 __declspec(dllimport) int __fastcall FastcallFunc1(char* a1);
27 __declspec(dllimport) int __fastcall FastcallFunc2(char* a1);
28 __declspec(dllimport) int __fastcall FastcallFunc3(char* a1);
29 __declspec(dllimport) int __fastcall FastcallFunc4(char* a1);
30 __declspec(dllimport) int __fastcall FastcallFunc5(char* a1);
31 
32 __declspec(dllimport) int __fastcall DecoratedFastcallFunc1(char* a1);
33 __declspec(dllimport) int __fastcall DecoratedFastcallFunc2(char* a1);
34 __declspec(dllimport) int __fastcall DecoratedFastcallFunc3(char* a1);
35 __declspec(dllimport) int __fastcall DecoratedFastcallFunc4(char* a1);
36 __declspec(dllimport) int __fastcall DecoratedFastcallFunc5(char* a1);
37 
38 __declspec(dllimport) extern int DataItem1;
39 __declspec(dllimport) extern int DataItem2;
40 __declspec(dllimport) extern int DataItem3;
41 
42 #define ok_int(a, b) \
43     if ((a) != (b)) { printf("wrong result in line %d, expected 0x%x, got 0x%x\n", __LINE__, (b), (a)); }
44 
45 int main(int argc, char *argv[])
46 {
47     char* str = "defaultstring";
48 
49     if (argc > 2)
50         str = argv[1];
51 
52     ok_int(CdeclFunc0(), 0);
53     ok_int(CdeclFunc1(str), 1);
54     ok_int(CdeclFunc2(str), 1);
55     ok_int(CdeclFunc3(str), 0x10001);
56 
57     ok_int(StdcallFunc0(), 0x10);
58     ok_int(StdcallFunc1(str), 0x11);
59     ok_int(StdcallFunc2(str), 0x11);
60     ok_int(StdcallFunc3(str), 0x10011);
61 #ifdef _M_IX86
62     ok_int(StdcallFunc4(str), 0x21);
63 #endif
64     ok_int(StdcallFunc5(str), 0x10021);
65 
66 #ifdef _M_IX86
67     ok_int(DecoratedStdcallFunc1(str), 0x21);
68     ok_int(DecoratedStdcallFunc2(str), 0x11);
69     //ok_int(DecoratedStdcallFunc3(str), 11);
70     ok_int(DecoratedStdcallFunc4(str), 0x21);
71     ok_int(DecoratedStdcallFunc5(str), 0x10021);
72 #endif
73     ok_int(FastcallFunc0(), 0x30);
74     ok_int(FastcallFunc1(str), 0x31);
75     ok_int(FastcallFunc2(str), 0x31);
76     ok_int(FastcallFunc3(str), 0x10031);
77 #ifdef _M_IX86
78     ok_int(FastcallFunc4(str), 0x42);
79     ok_int(FastcallFunc5(str), 0x10041);
80 #endif
81 #ifdef _M_IX86
82     ok_int(DecoratedFastcallFunc1(str), 0x42);
83     ok_int(DecoratedFastcallFunc2(str), 0x31);
84     //ok_int(DecoratedFastcallFunc3(str), 11);
85     ok_int(DecoratedFastcallFunc4(str), 0x42);
86     ok_int(DecoratedFastcallFunc5(str), 0x10041);
87 #endif
88     ok_int(DataItem1, 0x51);
89     ok_int(DataItem2, 0x51);
90     ok_int(DataItem3, 0x10051);
91 
92     printf("done.\n");
93 
94     return 0;
95 }
96