首先,我必須提到我不是高級的C++/C#程序員。我必須在C++中完成一個項目,在該項目中,我必須在串行端口(COMx)中填入(在單獨的線程中)一個循環緩衝區,並將數據傳入。我做了一些研究,但是我發現很多用C#編寫的代碼。所以我使用C++ CLR(因爲根據我的理解,我可以訪問.net命名空間)。受管理類成員指針
我搜索在互聯網上,我發現了一些例子寫在C#中,如果我有兩個不同類型的對象,我可以用一個指針到另一個對象方法:
private void btnInit_Click(object sender, RoutedEventArgs e)
{
_sensorInstance = new Sensor();
_mySerialPort = new MySerialPort();
_mySerialPort.DataHandler = _sensorInstance.Processing;
}
類MySerialPort
具有以下構件:
public Func<byte[], int> DataHandler;
而Sensor
類具有下列構件:
public int Processing(byte[] bytes)
{
int l = bytes.Length;
//code
return l;
}
代碼編譯時沒有錯誤。
現在我試着在C++中做類似的事情。
在我public ref class MySerialPort
我宣佈:
Func<array<Byte>^, int> ^DataHandler);
,並在我的
public ref class Sensor
我宣佈:
int Processing(array<Byte>^ bytes);
然後,我有另一個public ref class MyProject
具有兩個公共成員:
Sensor ^sensor;
MySerialPort ^mySerialPort;
和一個公共方法:
void Init()
{
_sensor = gcnew Sensor();
_mySerialPort = gcnew MySerialPort("COM3", 9600, 500, 500);
_serialPort->DataHandler = _sensor->Processing;
}
被稱爲在int main()
:myProjectObject.Init();
期間構建過程我收到以下兩個錯誤:
Error 1 error C3867: 'Sensor::Processing': function call missing argument list; use '&Sensor::Processing' to create a pointer to member
Error 2 error C2440: '=' : cannot convert from 'int (__clrcall Sensor::*)(cli::array<unsigned char,1> ^)' to 'System::Func<cli::array<unsigned char,1> ^,int> ^'
我不明白如何解決這個問題,爲什麼在C#中可以做到這一點,但不是在C++中。
我希望我的長問題不會打擾任何人,也許有人會解釋我失去了什麼。
此致
數字鎖定