2022-06-08 14:41:09 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
#ifdef _WIN32
|
2022-08-24 16:34:59 +00:00
|
|
|
#define EXPORTER __declspec(dllexport)
|
2022-08-14 18:26:13 +00:00
|
|
|
#else
|
|
|
|
#define EXPORTER
|
|
|
|
#endif
|
|
|
|
|
|
|
|
EXPORTER
|
2022-06-08 14:41:09 +00:00
|
|
|
int int_fn(int a, int b) {
|
|
|
|
return (a << 2) + b;
|
|
|
|
}
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-08 14:41:09 +00:00
|
|
|
double my_fn(int64_t a, int64_t b, const char *x) {
|
|
|
|
return (double)(a + b) + 0.5 + strlen(x);
|
|
|
|
}
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-08 14:41:09 +00:00
|
|
|
double double_fn(double x, double y, double z) {
|
|
|
|
return (x + y) * z * 3;
|
|
|
|
}
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-08 14:41:09 +00:00
|
|
|
double double_many(double x, double y, double z, double w, double a, double b) {
|
|
|
|
return x + y + z + w + a + b;
|
|
|
|
}
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-08 14:41:09 +00:00
|
|
|
double double_lots(
|
2022-06-08 14:50:31 +00:00
|
|
|
double a,
|
|
|
|
double b,
|
|
|
|
double c,
|
|
|
|
double d,
|
|
|
|
double e,
|
|
|
|
double f,
|
|
|
|
double g,
|
|
|
|
double h,
|
|
|
|
double i,
|
|
|
|
double j) {
|
|
|
|
return i + j;
|
2022-06-08 14:41:09 +00:00
|
|
|
}
|
|
|
|
|
2022-08-14 20:20:30 +00:00
|
|
|
|
|
|
|
EXPORTER
|
|
|
|
double double_lots_2(
|
|
|
|
double a,
|
|
|
|
double b,
|
|
|
|
double c,
|
|
|
|
double d,
|
|
|
|
double e,
|
|
|
|
double f,
|
|
|
|
double g,
|
|
|
|
double h,
|
|
|
|
double i,
|
|
|
|
double j) {
|
|
|
|
return a +
|
2022-08-24 16:34:59 +00:00
|
|
|
10.0 * b +
|
|
|
|
100.0 * c +
|
|
|
|
1000.0 * d +
|
|
|
|
10000.0 * e +
|
|
|
|
100000.0 * f +
|
|
|
|
1000000.0 * g +
|
|
|
|
10000000.0 * h +
|
|
|
|
100000000.0 * i +
|
|
|
|
1000000000.0 * j;
|
2022-08-14 20:20:30 +00:00
|
|
|
}
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-08 14:41:09 +00:00
|
|
|
double float_fn(float x, float y, float z) {
|
|
|
|
return (x + y) * z;
|
|
|
|
}
|
2022-06-10 01:27:56 +00:00
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
int a;
|
|
|
|
int b;
|
|
|
|
} intint;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
int a;
|
|
|
|
int b;
|
|
|
|
int c;
|
|
|
|
} intintint;
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-10 01:27:56 +00:00
|
|
|
int intint_fn(double x, intint ii) {
|
|
|
|
printf("double: %g\n", x);
|
|
|
|
return ii.a + ii.b;
|
|
|
|
}
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-10 01:27:56 +00:00
|
|
|
int intintint_fn(double x, intintint iii) {
|
|
|
|
printf("double: %g\n", x);
|
|
|
|
return iii.a + iii.b + iii.c;
|
|
|
|
}
|
2022-06-10 17:24:50 +00:00
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-10 17:24:50 +00:00
|
|
|
intint return_struct(int i) {
|
|
|
|
intint ret;
|
|
|
|
ret.a = i;
|
|
|
|
ret.b = i * i;
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
int64_t a;
|
|
|
|
int64_t b;
|
|
|
|
int64_t c;
|
|
|
|
} big;
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-10 17:24:50 +00:00
|
|
|
big struct_big(int i, double d) {
|
|
|
|
big ret;
|
|
|
|
ret.a = i;
|
|
|
|
ret.b = (int64_t) d;
|
|
|
|
ret.c = ret.a + ret.b + 1000;
|
|
|
|
return ret;
|
|
|
|
}
|
2022-06-10 17:33:01 +00:00
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-10 17:33:01 +00:00
|
|
|
void void_fn(void) {
|
|
|
|
printf("void fn ran\n");
|
|
|
|
}
|
|
|
|
|
2022-08-14 18:26:13 +00:00
|
|
|
EXPORTER
|
2022-06-10 17:33:01 +00:00
|
|
|
void void_ret_fn(int x) {
|
|
|
|
printf("void fn ran: %d\n", x);
|
|
|
|
}
|