我知道这有点长,但这是一个棘手的问题。感谢您的关注!我在这方面工作太久了。我做了很多研究并尝试了很多东西,希望有人可以帮助解释。
大纲:
用 C 语言编写。我需要从仪器中获取一组数据。数组的大小将根据收集的数据量而有所不同。我可以查询数据点的数量。我编写了一个函数来收集数据(如下所示)。这在 main() 中直接调用函数时有效。我用来测试的。但是,此函数将是一个 dll,并从更高 dll 中的函数调用。这不起作用。我相信是因为大小可变。
我迷失在可变大小和指针的细节中。任何帮助表示赞赏。
功能代码,从 main() 调用
*注意 - ViInt16 以下是特定于 VISA(仪器通信协议)的有符号短类型。函数返回一个 int 作为状态/错误(在其他代码中设置)。
标题:
int GetSamples (ViInt16 *DataArray, int DataSize);
功能:
int GetSamples (ViInt16 *DataArray, int DataSize)
{
ViUInt16 N=0;
ViInt16 Datatemp[DataSize];
viMoveIn (Handle, N, 0, DataSize, Datatemp);
memcpy (DataArray, Datatemp, sizeof(Datatemp);
}
主要的:
int totalsamples = (PreTrigPts() + AcqPts())
ViInt16 Data [totalsamples];
GetSamples (Data, totalsamples);
这行得通!我想,只是因为我可以得到总大小,然后从 main() 分配 ViInt16 数组。说实话,不确定我在传递数组时用指针等做什么
问题是,当它是一个调用函数的函数时,我不确定该怎么做,因为我认为,在查询大小之前,需要在顶部分配数组。这是我正在尝试的方法(这不起作用)
问题代码
低级“驱动程序”(称为 dll):
Header and function definition from above.
Functions_header:(将低级驱动程序称为 dll)
void AutoSample(void); //No returns. Writes to UI in Functions_list.c
函数列表.c:
void AutoSample ()
{
int PreTriggerPts = 0; //Declare all variables at top, or won't compile
int Points = 0;
int TotalSamples = 0
ViInt16 MyData [5] = {0}; //arbitrary since don't know size yet
TotalSamples = (PreTrigPts() + AcqPts());
ViInt16 MyData[TotalSamples]; //Trying to size by reinitializing?
GetSamples (MyData, TotalSamples);
//...calls another function to write MyData to UI...etc. etc.
主要.c:
AutoSample();
错误
当我尝试不同的事情时,我遇到了很多错误。如果需要,我可以更具体,但是如果我在知道变量的大小之后尝试初始化变量(就像我在工作代码中所做的那样),它会告诉我这是非法的。将声明放在首位可以解决此问题。现在我不知道要初始化的大小。从这里我一直在破解,没有更具体的。我需要对指针和内存做一些事情,但我不知道是什么。请,任何帮助表示赞赏!