繁体   English   中英

Unity3D和C#DLL通讯

[英]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。 我推荐我的第一个解决方案。

http://playground.arduino.cc/Interface/CPPWindows

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM