我目前正在爲一些本地C++代碼編寫一組包裝器。在包裝器中,我將託管數組作爲輸入並打算使用數組的內容來調用本機C++構造函數。出於某種原因,我似乎需要釘住數組或從構造函數調用中分別提取值。這裏是我的意思的一些例子。訪問託管陣列並鎖定
爲原生型的構造具有這樣的類型簽名:
NativeType(const double &d)
初步嘗試:
public ref class ExampleWrapper
{
ExampleWrapper(array<double>^in)
{
for(int i= 0; i< in->Length; ++i)
{
NativeType test(in[i]);
}
}
}
這回來了一個錯誤,將無法編譯。接下來我試過這個
public ref class ExampleWrapper
{
ExampleWrapper(array<double>^in)
{
for(int i= 0; i< in->Length; ++i)
{
double d = in[i];
NativeType test(d);
}
}
}
這似乎工作正常。最後,我試圖釘住這樣的陣列:
public ref class ExampleWrapper
{
ExampleWrapper(array<double>^in)
{
pin_ptr<double> pin_in = &in[0];
for(int i= 0; i< in->Length; ++i)
{
NativeType test(pin_in[i]);
}
}
}
這似乎也正常工作。
我想知道的是爲什麼第一個例子不起作用,而另外兩個似乎工作正常。此外,我想知道什麼是首選的方法使用。
那麼,構造函數需要引用的問題呢?我注意到,我進一步下了類似的例子,其中構造函數具有類型簽名NativeType(int i),它似乎編譯得很好,與第一個例子相當。 – Taus
是的,這將工作得很好,因爲你會傳遞一個原始值,而不是對象/內存地址。 – Amit