我们可以在dll中放置回调函数吗?

时间:2010-12-06 06:40:19

标签: c# serial-port unity3d

我正在尝试从另一个使用Unity3D引擎的程序中使用.Net serialport方法。

我有一个c#类库(dll),它在串口收到一些数据时注册并实现一个回调函数。

public CSerialDll()
{         
   _serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
}

void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   int bytes = _serial.BytesToRead;
   _comBuffer = new byte[bytes];
   _serial.Read(_comBuffer, 0, bytes);
   Console.WriteLine("data recv: " + System.Text.ASCIIEncoding.ASCII.GetString(_comBuffer));
}

然后在我的另一个程序中,我创建了一个类的实例。

我想知道是否会调用库(dll)中的回调serial_DataReceived。我正试图从另一个程序中读取库中的_comBuffer并且它总是为空(即使我在同一个应用程序中使用控制台应用程序测试时数据即将到来)。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:1)

<HUNCH>

如果我是一名班级设计师,我会把数据放入回调中,所以如果你看一下SerialDataReceivedEventArgs类,你会发现里面是你用数据缓冲。

因此,在您收到某个事件后,然后您调用了read,您实际上会丢弃发送给您的数据并请求更多。

换句话说,是的,它是一个外部库的事实与它不能正常工作的事实没有任何关系。

</HUNCH>

答案 1 :(得分:0)

只要正确设置了访问修饰符,对于单独的DLL中的方法通常没什么特别的。

但是,根据您设置解决方案的方式,确保您的bin文件夹中包含最新的DLL可能很麻烦。