我想從一個指標填充一個雙精度陣列,然后將整個陣列傳遞給一個 C# 函式。
我在主腳本中宣告并初始化陣列:
double values[3];
for (uint32_t index = 0; index < 3; index )
{
std::cout << "[EXE] Set the value for ";
std::cin >> values[index];
}
setValuesFcn(values); // Call the function passing the pointer
我傳遞了指標,因為在我的標題中我將函式宣告為bool setValuesFcn(double* values);
該功能的實作(這是我遇到問題的地方)是:
bool setValuesFcn(double *values)
{
array<double>^ setValues;
std::cout << "[DLL] Entering into setMultipleSignals()... " << std::endl;
for (uint32_t index = 0 ; index < 3; index )
{
setValues[index] = values[index]; // ERROR HERE!
std::cout << "[DLL] Value[" << index << "]: " << setValues[index] << std::endl;
}
if (!veristand_wrapper_cs::VeriStand_dll::SetMultipleSignals(setValues))
return true;
else
return false;
}
我收到一個 System.NullReferenceException 錯誤,上面寫著:Object reference not set to an instance of an object.
我試圖只列印值std::cout << "[DLL] Value[" << index << "]: " << values[index] << std::endl;并且它可以作業,所以我的函式能夠以指標作為引數來了解資料。
錯誤是否可能是由于嘗試將 double[] 的值分配給 array^ 之一?在這種情況下......有什么解決辦法嗎?
PD:我需要我嘗試填充的陣列是型別的,array<double>^因為該函式SetMultipleSignals是在我已經實作的 C# DLL 中分配的,并且它希望獲得這種型別的資料。這個函式的宣告是public static bool SetMultipleSignals(double[] values)
uj5u.com熱心網友回復:
您從未實體化setValues.
values是一個堆疊分配的陣列,但是setValues是一個^-pointer,它是一個指向由運行時分配和管理的記憶體的指標。除了,您從未分配過該記憶體并且指標為空,因此嘗試取消參考它會給您一個NullReferenceException.
你需要:
array<double>^ setValues = gcnew array<double>(3);
請參閱如何:在 C /CLI 中使用陣列。
一個重要線索是您從 CLR 獲得了例外,這意味著錯誤正在訪問托管物件,并且values是非托管的,因此錯誤不能與訪問values. 另一個線索是您從未指定setValues任何地方的容量
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533208.html
下一篇:使用指標宣告動態長度的字串
