Modelica 将字符串数组作为输入传递到外部C函数

Modelica 将字符串数组作为输入传递到外部C函数,modelica,Modelica,我想将字符串向量传递到外部C函数中 在一个简单的例子中,我只想通过C函数传递字符串向量(或1D数组) 我的Modelica函数如下所示: function testreadstri input String instri[2]; output String outstri[2]; external "C" test_stri(instri,, size(instri, 1), outstri); annotation (Include="#include <ebcmysql.cpp

我想将字符串向量传递到外部C函数中

在一个简单的例子中,我只想通过C函数传递字符串向量(或1D数组)

我的Modelica函数如下所示:

function testreadstri
 input String instri[2];
 output String outstri[2];
 external "C" test_stri(instri,, size(instri, 1), outstri);
 annotation (Include="#include <ebcmysql.cpp>", Library="libmysql");
end testreadstri;
void test_stri(const char* thestring, size_t nLines, const char **testresult)
{
    //bout = 12.3;

    size_t iLines;
    //size_t nLines;

    iLines = 0;
    //nLines = 1;

    while ( iLines <= nLines ) {

        <LINE_OF_INTEREST>
        iLines++;
    }
}
函数testreadstri
输入字符串instri[2];
输出字符串outstri[2];
外部“C”测试线(instri,,尺寸(instri,1),outstri);
注释(Include=“#Include”,Library=“libmysql”);
结束testreadstri;
我的功能看起来像:

function testreadstri
 input String instri[2];
 output String outstri[2];
 external "C" test_stri(instri,, size(instri, 1), outstri);
 annotation (Include="#include <ebcmysql.cpp>", Library="libmysql");
end testreadstri;
void test_stri(const char* thestring, size_t nLines, const char **testresult)
{
    //bout = 12.3;

    size_t iLines;
    //size_t nLines;

    iLines = 0;
    //nLines = 1;

    while ( iLines <= nLines ) {

        <LINE_OF_INTEREST>
        iLines++;
    }
}
void test\u stri(常量字符*字符串、大小线、常量字符**testresult)
{
//布特=12.3;
尺寸线;
//尺寸线;
线性=0;
//nLines=1;

(iLines是,这是由Modelica规范支持的,请参见。

是,这是由Modelica规范支持的,请参见。

这里演示了Modelica中纯外部函数的输入字符串和输出字符串处理

model Model
  function testreadstri
    input String instri[2];
    output String outstri[2];
    external "C" test_stri(instri, size(instri, 1), outstri, size(outstri, 1));
    annotation(Include="
#include \"ModelicaUtilities.h\"
#include <stdlib.h>
#include <string.h>

void test_stri(const char** thestring, size_t nLinesIn, const char** testresult, size_t nLinesOut)
{
  size_t iLines;

  // example for input string handling
  for (iLines = 0; iLines < nLinesIn; iLines++) {
    ModelicaFormatMessage(\"%s\\n\", thestring[iLines]);
  }

  // example for output string handling
  for (iLines = 0; iLines < nLinesOut; iLines++) {
    char* line = ModelicaAllocateStringWithErrorReturn(6);
    if (line != NULL) {
      strcpy(line, \"result\");
      testresult[iLines] = line;
    }
  }
}");
  end testreadstri;
  String s[:] = testreadstri({"first", "second"});
end Model;
模型
函数testreadstri
输入字符串instri[2];
输出字符串outstri[2];
外部“C”测试(instri,尺寸(instri,1),outstri,尺寸(outstri,1));
注释(包括=”
#包括\“ModelicaUtilities.h \”
#包括
#包括
无效测试(常量字符**字符串,大小线,常量字符**测试结果,大小线)
{
尺寸线;
//输入字符串处理示例
对于(iLines=0;iLines
下面是一个演示Modelica中纯外部函数的输入字符串和输出字符串处理的示例

model Model
  function testreadstri
    input String instri[2];
    output String outstri[2];
    external "C" test_stri(instri, size(instri, 1), outstri, size(outstri, 1));
    annotation(Include="
#include \"ModelicaUtilities.h\"
#include <stdlib.h>
#include <string.h>

void test_stri(const char** thestring, size_t nLinesIn, const char** testresult, size_t nLinesOut)
{
  size_t iLines;

  // example for input string handling
  for (iLines = 0; iLines < nLinesIn; iLines++) {
    ModelicaFormatMessage(\"%s\\n\", thestring[iLines]);
  }

  // example for output string handling
  for (iLines = 0; iLines < nLinesOut; iLines++) {
    char* line = ModelicaAllocateStringWithErrorReturn(6);
    if (line != NULL) {
      strcpy(line, \"result\");
      testresult[iLines] = line;
    }
  }
}");
  end testreadstri;
  String s[:] = testreadstri({"first", "second"});
end Model;
模型
函数testreadstri
输入字符串instri[2];
输出字符串outstri[2];
外部“C”测试(instri,尺寸(instri,1),outstri,尺寸(outstri,1));
注释(包括=”
#包括\“ModelicaUtilities.h \”
#包括
#包括
无效测试(常量字符**字符串,大小线,常量字符**测试结果,大小线)
{
尺寸线;
//输入字符串处理示例
对于(iLines=0;iLines
谢谢,@tbeu,我知道Modelica规范中的这一部分。但是我如何才能处理字符串(或更正确的字符数组),然后再处理C函数?这可能是一个问题,因为我的C技能太差了……谢谢,@tbeu,我知道Modelica规范中的这一部分。但是我如何处理字符串呢(或更正确的字符数组)然后在C函数中?这可能是一个问题,因为我的C技能太差了。。。