18#define XXTERN DPI_EXTERN DPI_DLLESPEC
20#define EETERN DPI_EXTERN DPI_DLLESPEC
34template <
typename FnTy>
35FnTy resolveSvDpi(
const char *name) {
39 auto *host = GetModuleHandleA(
nullptr);
41 host ?
reinterpret_cast<void *
>(GetProcAddress(host, name)) :
nullptr;
46 void *sym = dlsym(RTLD_DEFAULT, name);
48 void *mainProg = dlopen(
nullptr, RTLD_NOW);
50 sym = dlsym(mainProg, name);
56 "error: EsiCosimDpiServer failed to resolve required svdpi symbol '");
57 OutputDebugStringA(name);
58 OutputDebugStringA(
"'\n");
59 TerminateProcess(GetCurrentProcess(), 1);
62 "error: EsiCosimDpiServer failed to resolve required "
63 "svdpi symbol '%s'\n",
69 return reinterpret_cast<FnTy
>(sym);
76 static FnTy fn = resolveSvDpi<FnTy>(
"svDimensions");
82 static FnTy fn = resolveSvDpi<FnTy>(
"svGetArrayPtr");
88 static FnTy fn = resolveSvDpi<FnTy>(
"svSizeOfArray");
94 static FnTy fn = resolveSvDpi<FnTy>(
"svSize");
100 static FnTy fn = resolveSvDpi<FnTy>(
"svGetArrElemPtr1");
void * svGetArrayPtr(const svOpenArrayHandle h)
int svSizeOfArray(const svOpenArrayHandle h)
int svSize(const svOpenArrayHandle h, int d)
void * svGetArrElemPtr1(const svOpenArrayHandle h, int idx)
int svDimensions(const svOpenArrayHandle h)
XXTERN typedef void * svOpenArrayHandle