0

我需要在我的 simulink 模型中内联一个具有多个实例的 s-function。在 S-function 中,我需要加载一个 dll 文件,但它应该只在一个 s-function 实例中完成。我写的 tlc 如下:..... % function Start(block, system) 输出

dll_handle = LoadLibraryA("mydll"); dll_setup=(DLL_SETUP)GetProcAddress(dll_handle,"setup"); ......

代码生成后,这些 Start 函数行被添加到每个 s-function 实例的源代码中。但是,我需要加载一次 dll。是否可以仅为 s-function 的第一个实例添加这些行?

注意:我知道在 TLC 文档中,当模型中有多个 s-function 实例时,它声明要避免内联。

4

2 回答 2

0

最简单的做法是将这些行放在外部文件中并使用静态变量来跟踪一次性初始化。然后从 Start 函数添加对该函数的调用。如果要从 tlc 生成该外部文件,请查看 BlockTypeSetup TLC 函数和 LibAddToModelSources 以将源文件添加到生成的代码中。

于 2016-11-03T17:48:56.777 回答
0

这是来自一些模糊的记忆,但我认为你可以使用一个全局的:

%assign ::DLL_LOADED = 0

%function Start()

%if :: DLL_LOADED == 0
    %% load DLL here
    %assign ::DLL_LOADED = 1
%endif

我认为这样的事情会奏效。

于 2016-11-02T13:28:10.210 回答