我正在尝试使用 python 与动态模拟软件(Vensim)进行交互。该软件有一个头文件 vendll.h,我希望能够使用它。
我一直在为此查看 ctypes 模块,但没有找到任何东西。我也想避免使用 cython,但我会看看这是怎么回事。这是软件提供的文件示例,说明如何在 matlab 中使用该文件。您可能会或多或少地了解我希望能够在 python 中复制的内容的要点。
clear all
%*********************LOAD THE MODEL *************************
if not(libisloaded('VenDLL32'))
hfile = ['C:\Users\Public\Vensim\dll\vendll.h'];
loadlibrary('VenDLL32',hfile);
end
% Display Vensim DDL function calls and signatures
libfunctionsview VenDLL32
%% *********************EXECUTE SIMULATION *************************
% check calllib returns to verify initiation
str=['SPECIAL>LOADMODEL|RABFOX.vpm'];
calllib('VenDLL32','vensim_check_status')
calllib('VenDLL32','vensim_command',str)
str=['MENU>RUN|o'];
calllib('VenDLL32','vensim_command',str)
%% *********************RETRIEVE DATA *************************
% retrieve data from the post simulation execution
tnum = 201;
timepts = int32(tnum);
mytime = zeros(1,tnum);
mytimePtr1 = libpointer('singlePtr', mytime);
myrabpop = zeros(1,tnum);
myrabpopPtr1 = libpointer('singlePtr', myrabpop);
% vensim get data command
[int32_status, cstring_vdf, cstring_var1, cstring_var2, singlePtr_var1, ...
singlePtr_var2] = calllib('VenDLL32','vensim_get_data','CURRENT.vdf', ...
'Rabbit Population','time',myrabpopPtr1(1),mytimePtr1(1),timepts);
myrabpopPtr1(1).Value'
mytimePtr1(1).Value'
%% ******************** UNLOAD VENSIM DLL ********************
% unload the library
unloadlibrary VenDLL32
在 matlab 中看起来很简单,所以在 python 中应该是小菜一碟吧?
如何加载头文件并通过 python 访问其内容?
还有一个等效的静态链接库 (.lib) 文件(我没有看到任何 .dll),名为 vendll32.lib。如果我不能使用头文件,有没有办法以类似的方式使用这个文件?