DLL檔案內容:
讀卡函式:int ReadCard(ComPara:pchar;RData:pchar)
功能:讀購電卡,并將該卡對應的資訊讀出。
? 輸入引數:ComPara,格式:通訊埠|波特率 COM1 傳1 …波特率9600
? 輸出引數:Rdata
卡格式: 卡號|區域碼|時間|次數|狀態
回傳值不為1時,讀卡失敗。呼叫錯誤碼函式解釋說明
回傳值為1時,讀卡成功。
[DllImport("ngrwcard.dll", EntryPoint = "ReadCard", CharSet = CharSet.Auto,ExactSpelling = true,CallingConvention = CallingConvention.StdCall)]
public static extern int ReadCard([MarshalAs(UnmanagedType.LPStr)]string ComPara,StringBuilder myStr);
public string myPort = "1|9600";
public StringBuilder RData = new StringBuilder();
private void button3_Click(object sender, EventArgs e)
{
if(Program.ReadCard(v, RData)==1)
{
listBox1.Items.Add(RData.ToString());
}
else
{
listBox1.Items.Add(Program.ReadCard(v, RData));
listBox1.Items.Add(RData.ToString());
Program.GetErrorInfo(Program.ReadCard(myPort , RData), errStr);
listBox1.Items.Add(Program.ReadCard(myPort , RData));
MessageBox.Show(errStr.ToString(),"提示");
}
}
ReadCard不能回傳1,RData也不能回傳值,但GetErrorInfo能根據ReadCard回傳值給出錯誤碼解釋“未插卡或卡反插“,說明RData沒有回傳正確的值。
請教大神該如何修改?
uj5u.com熱心網友回復:
pchar沒有傳對https://blog.csdn.net/zhangjin7422/article/details/100761983
uj5u.com熱心網友回復:
不是這個問題。

public StringBuilder OutStr = new StringBuilder();
public StringBuilder myOutStr = new StringBuilder();
[DllImport("ngrwcard.dll", EntryPoint = "ReadCard", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
public static extern int ReadCard(string ComPara, StringBuilder RData);
[DllImport("ngrwcard.dll", EntryPoint = "GetErrorInfo", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
public static extern int GetErrorInfo(int ID, StringBuilder ErrStr);
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Add(ReadCard("1|9600", OutStr));
listBox1.Items.Add(OutStr.ToString());
把CharSet.Auto改為CharSet.Ansi,正確讀出。
結貼!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/100641.html
標籤:C#
上一篇:wpf listview使用求助,獲取選中行,第三列的資料。
下一篇:讀取注冊表項的值
