台灣最大程式設計社群網站
線上人數
1514
 
會員總數:241330
討論主題:186904
歡迎您免費加入會員
討論區列表 >> C# >> 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。c#libusbdotnet
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。c#libusbdotnet
價值 : 200 QP  點閱數:334 回應數:2

樓主

xcv546
門外漢
0 1
20 0
發送站內信


嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。

我試圖將txtSend.Text="VOLT 5"傳給機器
但是我下中斷點去看
然後按下READ的BUTTON 回應我說 No more bytes!
似乎根本沒傳過去

再我將執行檔關閉時,跳出 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。

我上網找人家說 可能是DLL檔案壞掉...

我驚訝了 我就引入了一個Libusbdotnet.dll
那肯定是這個損毀?
我嘗試幾次..一樣的結果..
不知道怎麼修復

public partial class Form1 : Form
{
DateTime LastDataEventDate = DateTime.Now;
UsbDevice MyUsbDevice;
UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(0x164E, 0x258B);
UsbEndpointWriter writer =null ;
UsbEndpointReader reader = null;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep03);
reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep02);

}


private void btnRead_Click(object sender, EventArgs e)
{
ErrorCode ec = ErrorCode.None;

byte[] readBuffer = new byte[1024];
int bytesRead;
try
{
ec = reader.Read(readBuffer, 100, out bytesRead);
if (bytesRead == 0)
MessageBox.Show("No more bytes!");
txtRead.Text = Encoding.Default.GetString(readBuffer, 0, bytesRead);
}
catch (Exception ex)
{
MessageBox.Show("Error:" + ex.Message);
}
finally
{

}
}

private void btnSend_Click(object sender, EventArgs e)
{


int bytesWritten;
try
{
writer.Write(Encoding.Default.GetBytes(txtSend.Text), 2000, out bytesWritten);


}
catch (Exception ex)
{
MessageBox.Show("Error:" + ex.Message);
}
finally
{

}
}


}






別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

P陳
檢舉此回應
已經損壞的 DLL 除非重新製作,否則是不可能由 DLL 的使用者來修正的。
本篇文章回覆於2017-11-21 16:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

誰是誰
檢舉此回應


回樓主: 你可以寫個 try catch,找出真正發生問題的點在哪裡,這類的訊息很常發生在 P/Invoke 時 方法的參數或回傳值宣告不正確導致
本篇文章回覆於2017-11-22 17:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.