[英]Unity3D and C# DLL comunication
我正在Unity 3D中做一个使用串行端口的项目,我在Unity内部的串行端口有问题。 我有一个主意,但我不知道它会起作用。
我打算在c#中构建一个用于统一的dll,此dll文件是串行端口驱动程序,并允许Unity通过Unity中的c#类将数据获取并发送到串行端口。
令人怀疑的是:c#中有一个名为“ SerialDataReceivedEventHandler”的事件(表示将处理SerialPort对象的DataReceived事件的方法),但是当使用dll文件时,似乎不会自动引发此事件。
如何在dll中自动调用此方法?
另一种选择是使用win32 API在c ++中编写一个dll文件,一旦端口通信,这会更有用吗?
谢谢。
我见过很多人报告SerialDataReceivedEventHandler问题。 我确定SerialPort.BytesToRead可以工作。 您可以忘记SerialDataReceivedEventHandler ,而可以使用SerialPort.BytesToRead实现您自己的事件系统。
方法如下:
您的事件系统应该有两个事件。 一个不能从您的应用程序(事件A)和一个可以从你的应用程序(事件B)访问访问。
对于事件a,应该在SerialPort.BytesToRead更改其值时添加SerialPort.BytesToRead来调用事件A。
调用事件A时 ,它将检查SerialPort.BytesToRead是否大于零。 如果SerialPort.BytesToRead大于0,则您有新数据要读取,然后事件B应由事件A触发。 如果SerialPort.BytesToRead为0,则不要触发事件B。
然后,您可以从应用程序中实现事件B ,然后等待它触发。 触发时,您可以从那里读取新接收到的数据。
要么
如果这对您不起作用,则可以使用建议的dll样式进行操作。 Win32 API似乎很难理解。 您可以从Arduino网站上获取简单的SerialClass,并为其添加功能,然后将其编译为dll。 那也可以。 由于代码太大,我无法在此处发布整个代码,但我将在此处删除链接。 这种方法的缺点是只能在Windows上使用。 要使其在Mac和Linux上运行,您必须为每个平台编译一个dll。 我推荐我的第一个解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.