我知道这是写浮点数组的方法
Variant Data;
DateTime CurrentTime;
CurrentTime.now();
double* ArrayVar;
Data.SafeArrayAccessData(Data.parray, reinterpret_cast<void**>(&ArrayVar));
std::memcpy(ArrayVar, Values.data(), Values.size() * sizeof(double));
SafeArrayUnaccessData(Data.parray);
ItemValues.emplace_back(new ValueQT((Data), EnumQuality_QUALITY_NOT_SET, CurrentTime));
ItemNames.emplace_back(ItemName);
ItemPaths.emplace_back(L"");
// auto Session = new DaSession(URL);
Session->write(Items, Paths, const_cast<std::vector<ValueQT*>&>(Values), WriteResults, &ExecutionOptions_);
但是如何准备一个用于写入的字符串数组呢?下面的代码只会崩溃。
wchar_t** Temp = new wchar_t*[Size];
for (int j = 0; j < Size; j++)
{
Temp[j] = new wchar_t[Values[j].size() + 1 ];
std::wcscpy(Temp[j], Values[j].c_str());
}
wchar_t** ArrayVar;
Data.SafeArrayAccessData(Data.parray, reinterpret_cast<void**>(&ArrayVar));
std::memcpy(ArrayVar, Temp, Size * sizeof(wchar_t*));
for (size_t j = 0; j < Size; j++)
{
std::wcscpy((ArrayVar[j]), (Temp[j]));
}
Data.SafeArrayUnaccessData(Data.parray);
我需要使用来自 https://github.com/SoftingInduscial/OPC-Classic-SDK
的 OPC 工具包如果我不使用 for 循环,程序也会崩溃,并显示相同的错误消息。 此外,未为 ValueQT 设置值(使用字符串数组)。
如果有人需要这个,这里有一个可行的解决方案:
//Values is std::vector<std::wstring>
Variant Data;
Data.vt = VT_BSTR | VT_ARRAY;
Data.parray = SafeArrayCreateVector(VT_BSTR, 0, Size);
wchar_t** ArrayVar;
ata.SafeArrayAccessData(Data.parray, reinterpret_cast<void**>(&ArrayVar));
for(Py_ssize_t j = 0; j < Size; j++)
{
BSTR temp = SysAllocString(Values[j].c_str());
SafeArrayPutElement(Data.parray, reinterpret_cast<LONG*>( & j), temp);
SysFreeString(temp);
}
Data.SafeArrayUnaccessData(Data.parray);