Following up on Tom's comments, I have tried dumping the function into the vensim_external_function.c file, then renaming it to " ".cpp. I get a bunch or warnings upon compile:
Code: Select all
$ g++ -shared -o vensim_functions.dll vensim_external_functions.cpp -Wl,--output-def,vensim_functions.def
vensim_external_functions.cpp:191:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
191 | {"COSINE"," {x} ",1,0,COS_FUNC,0,0,0,0},
| ^~~~~~~~
vensim_external_functions.cpp:191:51: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
191 | {"COSINE"," {x} ",1,0,COS_FUNC,0,0,0,0},
| ^~~~~~~
vensim_external_functions.cpp:192:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
192 | {"INRANGE"," {x} , {minval} , {maxval} ",3,0,INRANGE_FUNC,0,0,0,0},
| ^~~~~~~~~
vensim_external_functions.cpp:192:52: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
192 | {"INRANGE"," {x} , {minval} , {maxval} ",3,0,INRANGE_FUNC,0,0,0,0},
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vensim_external_functions.cpp:193:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
193 | {"PSUM"," {vector} , {nelm} , {nelmlimit} ",3,1,PSUM_FUNC,0,0,0,0},
| ^~~~~~
vensim_external_functions.cpp:193:49: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
193 | {"PSUM"," {vector} , {nelm} , {nelmlimit} ",3,1,PSUM_FUNC,0,0,0,0},
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vensim_external_functions.cpp:194:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
194 | {"MATRIX_INVERT"," {matrix} ",1,1,INVERT_FUNC,2,0,0,0},
| ^~~~~~~~~~~~~~~
vensim_external_functions.cpp:194:58: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
194 | {"MATRIX_INVERT"," {matrix} ",1,1,INVERT_FUNC,2,0,0,0},
| ^~~~~~~~~~~~
vensim_external_functions.cpp:195:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
195 | {"MATRIX_INPLACE_INVERT"," {matrix} ",1,1,INPLACE_INVERT_FUNC,0,1,0,0},
| ^~~~~~~~~~~~~~~~~~~~~~~
vensim_external_functions.cpp:195:66: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
195 | {"MATRIX_INPLACE_INVERT"," {matrix} ",1,1,INPLACE_INVERT_FUNC,0,1,0,0},
| ^~~~~~~~~~~~
vensim_external_functions.cpp:196:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
196 | {"INTERNAL_ROR"," {x} , {time} , {minror} , {maxror} , {streamid} , {compute} ",6,0,INTERNAL_ROR_FUNC,0,0,0,0},
| ^~~~~~~~~~~~~~
vensim_external_functions.cpp:196:57: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
196 | {"INTERNAL_ROR"," {x} , {time} , {minror} , {maxror} , {streamid} , {compute} ",6,0,INTERNAL_ROR_FUNC,0,0,0,0},
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vensim_external_functions.cpp:197:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
197 | {"MYMESSAGE"," {'message'} , {time} ",2,0,MYMESSAGE_FUNC,0,0,1,0},
| ^~~~~~~~~~~
vensim_external_functions.cpp:197:54: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
197 | {"MYMESSAGE"," {'message'} , {time} ",2,0,MYMESSAGE_FUNC,0,0,1,0},
| ^~~~~~~~~~~~~~~~~~~~~~~~
vensim_external_functions.cpp:198:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
198 | {"MYFINDZERO"," {vector_to_zero} , {nelement} ",2,1,MYFINDZERO_FUNC,1,2,0,0},
| ^~~~~~~~~~~~
vensim_external_functions.cpp:198:55: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
198 | {"MYFINDZERO"," {vector_to_zero} , {nelement} ",2,1,MYFINDZERO_FUNC,1,2,0,0},
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vensim_external_functions.cpp:199:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
199 | {"MYLOOKUP"," {lookup} , {x} ",2,0,MYLOOKUP_FUNC,0,0,0,1},
| ^~~~~~~~~~
vensim_external_functions.cpp:199:53: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
199 | {"MYLOOKUP"," {lookup} , {x} ",2,0,MYLOOKUP_FUNC,0,0,0,1},
| ^~~~~~~~~~~~~~~~~~
vensim_external_functions.cpp:200:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
200 | {"MYALLTYPES"," {'literal'} , {lookup} , {vector} , {x} ",4,1,MYALLTYPES_FUNC,1,0,1,1},
| ^~~~~~~~~~~~
vensim_external_functions.cpp:200:55: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
200 | {"MYALLTYPES"," {'literal'} , {lookup} , {vector} , {x} ",4,1,MYALLTYPES_FUNC,1,0,1,1},
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vensim_external_functions.cpp:201:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
201 | {"MYCONSTDEF"," {'literal'} ",1,0,MYCONSTDEF_FUNC,CONSTDEF_MARKER,0,1,0},
| ^~~~~~~~~~~~
vensim_external_functions.cpp:201:55: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
201 | {"MYCONSTDEF"," {'literal'} ",1,0,MYCONSTDEF_FUNC,CONSTDEF_MARKER,0,1,0},
| ^~~~~~~~~~~~~~~
vensim_external_functions.cpp:202:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
202 | {"MYDATADEF"," {'literal'} ",1,0,MYDATADEF_FUNC,DATADEF_MARKER,0,1,0},
| ^~~~~~~~~~~
vensim_external_functions.cpp:202:54: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
202 | {"MYDATADEF"," {'literal'} ",1,0,MYDATADEF_FUNC,DATADEF_MARKER,0,1,0},
| ^~~~~~~~~~~~~~~
vensim_external_functions.cpp:203:42: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
203 | {"REVERSE_AND_MULTIPLY_SUM", " {list1}, {list2}, {n_values} ", 3, 2, REVERSE_AND_MULTIPLY_SUM_FUNC, 0, 0, 0, 0},
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
vensim_external_functions.cpp:203:70: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
203 | {"REVERSE_AND_MULTIPLY_SUM", " {list1}, {list2}, {n_values} ", 3, 2, REVERSE_AND_MULTIPLY_SUM_FUNC, 0, 0, 0, 0},
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
After putting the output .dll on path, I got several warnings from Vensim that the .dll could not be loaded. Without doing anything else, I closed and reopened several times, to see if the error message would disappear. After closing and reopening 4 times, the Vensim error message went away and the .dll file for external functions appears to have loaded. The functions are now available in the user defined section of the equation editor. Will begin reviewing whether this thing can actually work for what I need it to do now. I am a bit worried about what these warnings mean for a conversion to strings, however.