2015-05-10 48 views
0

我在Unity 3D中使用串行端口做一個項目,我遇到了Unity內部的串行端口問題。我有一個想法,但我不知道它會起作用。Unity3D和C#DLL通信

我打算在c#中構建一個用於統一的dll,這個dll文件是串口驅動程序,並允許Unity通過Unity中的類c#獲取數據並將數據發送到串口。

的疑問是:有一個在C#中的事件稱爲「SerialDataReceivedEventHandler」(表示將要處理的SerialPort對象的DataReceived事件檢索方法),但它似乎是使用的DLL文件時,此事件不會自動升起。

如何在dll中自動調用此方法?

其他的替代方法是用C++編寫一個使用win32 API的dll文件,一旦端口通信這會更有用嗎?

謝謝。

+0

Unity和Unity3D是不同的標籤,Unity3D是你想要的。祝你好運,但你的問題 – ILiveForVR

回答

0

我看到很多人報告問題SerialDataReceivedEventHandler。我確信SerialPort.BytesToRead的作品。您可以忘記SerialDataReceivedEventHandler,而改爲使用SerialPort.BytesToRead實施您自己的事件系統。

執行此操作的方法:

您的事件系統應該有兩個事件。一個不能從您的應用程序(事件A)和一個可以從您的應用程序(事件B)訪問。

對於事件,你應該增加SerialPort.BytesToRead調用事件ASerialPort.BytesToRead改變其價值。

事件A被調用時,它會檢查是否SerialPort.BytesToRead大於零。如果SerialPort.BytesToRead大於0,則表示有新數據要讀取,然後事件B應該由觸發事件A。如果SerialPort.BytesToRead爲0,請勿觸發事件B

然後,您可以從您的應用程序實現您的事件B並等待它觸發。觸發時,您可以從那裏讀取新收到的數據。

OR

如果不爲你工作,你可以用你的建議的dll的風格去做。 Win32 API似乎很難和令人困惑。您可以從Arduino網站獲取簡單的SerialClass,然後添加功能,然後將其編譯爲dll。這也會起作用。我不能在這裏發佈整個代碼,因爲它太大了,但我會放下鏈接。這種方法的缺點是它只能在Windows上工作。爲了使它在Mac和Linux上工作,你必須爲每個平臺編譯一個dll。我推薦我的第一個解決方案

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