C# 未找到方法:';IntPtr System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(!!0)

C# 未找到方法:';IntPtr System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(!!0),c#,rfid,C#,Rfid,我正在使用windows 7(32位)上的visual studio 2010 professional连接到RFID阅读器LRU3000,遇到此异常 找不到方法:“IntPtr” System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(!!0) 请从以下链接下载示例。 我在网上搜索了很多次,但我不知道哪里错了。 提前谢谢 这是示例的代码 这是示例的代码: 异常发生在代码行: try {

我正在使用windows 7(32位)上的visual studio 2010 professional连接到RFID阅读器LRU3000,遇到此异常

找不到方法:“IntPtr” System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(!!0)

请从以下链接下载示例。 我在网上搜索了很多次,但我不知道哪里错了。 提前谢谢


这是示例的代码


这是示例的代码: 异常发生在代码行:

 try
            {
               reader.StartAsyncTask(FedmTaskOption.ID_NOTIFICATION, this, taskOpt);
            }
            catch (FeReaderDriverException ex)
            {
                MessageBox.Show(ex.ToString());
            }



public partial class NotificationSample : Form,FedmTaskListener
{
    FedmIscReader reader;
    FedmTaskOption taskOpt;
    long count=1; 

     //declaration from delegatetyp
    public delegate void DelegateDisplayRecSets(int recSets,
                                                byte[] type,
                                                string[] serialNumber,
                                                string[] dataBlock,
                                                string[] date,
                                                string[] time,
                                                byte[] antennaNr,
                                                Dictionary<byte, FedmIscRssiItem>[] dicRSSI,
                                                byte[] input,
                                                byte[] state,
                                                string ip);

    /// <summary>
    /// Der Haupteinstiegspunkt für die Anwendung.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new NotificationSample());
    }

    //Constructor
    public  NotificationSample()
    {
        InitializeComponent();
        try
        {
            reader = new FedmIscReader();
            reader.SetTableSize(FedmIscReaderConst.BRM_TABLE, 255); // max 255 tag with each notification
            taskOpt = new FedmTaskOption();
        }
        catch(FedmException ex)
        {
            MessageBox.Show(ex.ToString()); 
            return;
        }
    }

    //Actualy Time propertie
    private string Time
    {
        get
        {
            DateTime d;
            d = DateTime.Now;

            string t;

            // Get the Date
            if (d.Month.ToString().Trim().Length == 1)
            {
                t = "0" + d.Month.ToString().Trim() + "/";
            }
            else
            {
                t = d.Month.ToString().Trim() + "/";
            }
            if (d.Day.ToString().Trim().Length == 1)
            {
                t += "0" + d.Day.ToString().Trim() + "/";
            }
            else
            {
                t += d.Day.ToString().Trim() + "/";
            }
            t += d.Year.ToString().Trim() + " ";

            // Get the time
            if (d.Hour.ToString().Trim().Length == 1)
            {
                t += "0" + d.Hour.ToString().Trim() + ":";
            }
            else
            {
                t += d.Hour.ToString().Trim() + ":";
            }
            if (d.Minute.ToString().Trim().Length == 1)
            {
                t += "0" + d.Minute.ToString().Trim() + ":";
            }
            else
            {
                t += d.Minute.ToString().Trim() + ":";
            }
            if (d.Second.ToString().Trim().Length == 1)
            {
                t += "0" + d.Second.ToString().Trim() + ".";
            }
            else
            {
                t += d.Second.ToString().Trim() + ".";
            }
            if (d.Millisecond.ToString().Trim().Length == 1)
            {
                t += "00" + d.Millisecond.ToString().Trim() + ".";
            }
            else if (d.Millisecond.ToString().Trim().Length == 2)
            {
                t += "0" + d.Millisecond.ToString().Trim() + ".";
            }
            else
            {
                t += d.Millisecond.ToString().Trim() + ".";
            }

            return t;
        }
    }

    /*****************************Methods from interface FedmTaskListener*******************/
    public void OnNewNotification(int iError,string IP,uint PortNr) 
    {
        int i;
        FedmBrmTableItem[] brmItems;
        brmItems = (FedmBrmTableItem[])reader.GetTable(FedmIscReaderConst.BRM_TABLE);

        //declaration from delegateobject 
        DelegateDisplayRecSets DisplayRecSetMethod = new DelegateDisplayRecSets(DisplayRecSets);

        object[] obj = new object[11];
        IAsyncResult result; 

        if(brmItems == null)
        {
            return;
        }
        string[] serialnumber = new string[brmItems.Length];
        string[] dataBlock = new string[brmItems.Length];
        string[] date = new string[brmItems.Length];
        string[] time = new string[brmItems.Length];
        byte[] type = new byte[brmItems.Length];
        byte[] antennaNr = new byte[brmItems.Length];
        byte[] input = new byte[brmItems.Length];
        byte[] state = new byte[brmItems.Length];
        byte[] dbsize = new byte[brmItems.Length];
        Dictionary<byte, FedmIscRssiItem>[] dicRSSI = new Dictionary<byte, FedmIscRssiItem>[brmItems.Length];

        long dbn;
        byte dbadr;
        string db;

        for (i = 0; i < brmItems.Length; i++)
        {   // serial number
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_SNR))
            {
                brmItems[i].GetData(FedmIscReaderConst.DATA_SNR, out serialnumber[i]);
            }
            // data blocks
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_RxDB))
            {
                brmItems[i].GetData(FedmIscReaderConst.DATA_DBN, out dbn);
                brmItems[i].GetData(FedmIscReaderConst.DATA_DB_ADR, out dbadr);
                int j;
                for (j = dbadr; j < dbn; j++)
                {
                    brmItems[i].GetData(FedmIscReaderConst.DATA_RxDB, j, out db);
                    dataBlock[i] = dataBlock[i] + db + "\r\n"+"\t\t";
                }
            }
            // Transponder Type
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_TRTYPE))
            {
                brmItems[i].GetData(FedmIscReaderConst.DATA_TRTYPE, out type[i]);
            }
            // Date
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_DATE))
            {
                date[i] = brmItems[i].GetReaderTime().GetDate();
            }

            // Time
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_TIMER))
            {
                time[i] = brmItems[i].GetReaderTime().GetTime();
            }

            // Antenna number
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_ANT_NR))
            {
                brmItems[i].GetData(FedmIscReaderConst.DATA_ANT_NR, out antennaNr[i]);
            }
            // RSSI value
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_ANT_RSSI))
            {
                dicRSSI[i] = brmItems[i].GetRSSI();
            }
            else
            {
                dicRSSI[i] = new Dictionary<byte, FedmIscRssiItem>();
            }
            // Input
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_INPUT))
            {
                brmItems[i].GetData(FedmIscReaderConst.DATA_INPUT, out input[i]);
                brmItems[i].GetData(FedmIscReaderConst.DATA_STATE, out state[i]);
            }

        }
        obj[0] = brmItems.Length;
        obj[1] = type;
        obj[2] = serialnumber;
        obj[3] = dataBlock;
        obj[4] = date;
        obj[5] = time;
        obj[6] = antennaNr;
        obj[7] = dicRSSI;
        obj[8] = input;
        obj[9] = state;
        obj[10] = IP;

        result = (IAsyncResult)Invoke(DisplayRecSetMethod, obj);

    }

    public void OnNewApduResponse(int iError)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public void OnNewQueueResponse(int iError)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public void OnNewSAMResponse(int iError, byte[] responseData)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public void OnNewReaderDiagnostic(int iError,string IP,uint PortNr) 
    {

    }

    public int OnNewMaxAccessEvent(int iError, string maxEvent, string ip, uint portNr)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public int OnNewMaxKeepAliveEvent(int iError, uint uiErrorFlags, uint TableSize, uint uiTableLength, string ip, uint portNr)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public void OnNewTag(int iError)
    {

    }

    public void onNewPeopleCounterEvent(uint counter1, uint counter2, uint counter3, uint counter4, string ip, uint portNr, uint busAddress)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    /************************************ENDE***********************************************/

    /******************************************************Asynchrone method*****************************************************************************************************/
    public void DisplayRecSets( int recSets,
                                byte[] type,
                                string[] serialNumber,
                                string[] dataBlock,
                                string[] date,
                                string[] time,
                                byte[] antennaNr,
                                Dictionary<byte, FedmIscRssiItem>[] dicRSSI,
                                byte[] input,
                                byte[] state,
                                string ip)
    {
        Dictionary<byte, FedmIscRssiItem> RSSIval;
        FedmIscRssiItem RSSIitem;
        int i;
        bool bcheck;
        byte antNo;
        string dr;
        string tr = "";

        FedmBrmTableItem[] brmItems;
        brmItems = (FedmBrmTableItem[])reader.GetTable(FedmIscReaderConst.BRM_TABLE);

        tr += "-----------------------------------------------------------------" + "\r\n";
        tr += "DATE/TIME: " + Time.ToString() + "\r\n";
        tr += "-----------------------------------------------------------------" + "\r\n";
        count = 1;
        for (i = 0; i < recSets; i++)
        {
            tr += (count).ToString().Trim() + "." + "   TRANSPONDER" + "\r\n";
            count = count + 1;
            if (type[i] >= 0)
            {
                //just the two last bit
                dr = "0x" + FeHexConvert.IntegerToHexString(type[i]).Substring(FeHexConvert.IntegerToHexString(type[i]).Length - 2, 2);
                tr += "TR-TYPE:" + "\t" + dr.ToString() + "\r\n";
            }

            // Output SeriaNo.
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_SNR))
            {
                if (serialNumber[i] != null)
                {
                    tr += "SNR:" + "\t\t" + serialNumber[i].ToString() + "\r\n";
                }
            }
            // Output Data Blocks
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_RxDB))
            {
                if (dataBlock[i] != null)
                {
                    tr += "DB:" + "\t\t" + dataBlock[i].ToString() + "\r\n";
                }
            }

            // Output Date
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_TIMER) || brmItems[i].IsDataValid(FedmIscReaderConst.DATA_DATE))
            {
                if (date[i] != null)
                {
                    tr += "DATE:" + "\t\t" + date[i].ToString() + "\r\n";
                }
            }

            // Output Time
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_TIMER))
            {
                if (time[i] != null)
                {
                    tr += "TIME:" + "\t\t" + time[i].ToString() + "\r\n";
                }
            }

            // It is possible either to output the ANT_NR or the RSSI value (this is also important for the reader config!)
            // Output ANT_NR
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_ANT_NR))
            {
                tr += "ANT. NR:"+"\t\t" + (antennaNr[i].ToString()).Trim() + "\r\n";    
            }

            // It is possible either to output the ANT_NR or the RSSI value (this is also important for the reader config!) 
            // Output RSSI
            if (dicRSSI.Length > 0)
            {
                if (dicRSSI[i] != null)
                {
                    RSSIval = dicRSSI[i];
                    for(antNo = 1; antNo<FedmBrmTableItem.TABLE_MAX_ANTENNA; antNo++)
                    {
                        bcheck = RSSIval.TryGetValue(antNo, out RSSIitem);
                        if (!bcheck)
                            continue;

                        tr += "RSSI of AntNr. " + "\t" + antNo.ToString() + " is " + "-" + RSSIitem.RSSI.ToString() + "dBm" + "\r\n";
                    }
                }
            }

            // Output INPUT
            if (brmItems[i].IsDataValid(FedmIscReaderConst.DATA_INPUT))
            {
                tr += "INPUT:" + "\t\t" + (input[i].ToString()).Trim() + "\r\n";
                tr += "STATE:" + "\t\t" + (state[i].ToString()).Trim() + "\r\n";
            }

            // Output IP where notification data comes from 
            tr += "FROM:" + "\t\t" + ip + "\r\n";
            tr += "" + "\r\n";
            tr += "" + "\r\n";
        }
            this.textBoxData.AppendText(tr); 
            tr = "";
   }
    /**********************************************************ENDE***************************************************************************************************************/

    /**************************************************Buttons**********************************************/
    private void buttonListen_Click(object sender, EventArgs e)
    {

        if(this.buttonListen.Text == "Listen")
        {

            this.buttonListen.Text = "Cancel";

            taskOpt.IPPort = Convert.ToInt16(this.textBoxPortNr.Text);
            if(this.checkBoxAkn.Checked)
            {
                taskOpt.NotifyWithAck = 1;
            }
            else
            {
                taskOpt.NotifyWithAck = 0;
            }
            //Start from intern Thread
            try
            {
               reader.StartAsyncTask(FedmTaskOption.ID_NOTIFICATION, this, taskOpt);
            }
            catch (FeReaderDriverException ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        else
        {
            this.buttonListen.Text = "Listen";
            //End from intern thread
            int val;
            reader.ResetTable(FedmIscReaderConst.BRM_TABLE);
            val=reader.CancelAsyncTask(); 
            //case Deadlocks ->-4084
            if (val < 0)
            {
               reader.CancelAsyncTask();
            }

        }
    }

    private void buttonClear_Click(object sender, EventArgs e)
    {
        this.textBoxData.Clear();
        count = 1;
    }
    /***********************************************************Ende******************************************/

    private void NotificationSample_FormClosing(object sender, FormClosingEventArgs e)
    {
        reader.CancelAsyncTask();
        Application.Exit();
    }

}
试试看
{
StartAsyncTask(FedmTaskOption.ID_通知,this,taskOpt);
}
捕获(FeeraderDriverException ex)
{
Show(例如ToString());
}
公共部分类NotificationSample:Form,FedmTaskListener
{
FedmIscReader;
FedmTaskOption taskOpt;
长计数=1;
//被授权人声明类型
公共委托无效DelegateDisplayRecSets(int recSets,
字节[]类型,
字符串[]序列号,
字符串[]数据块,
字符串[]日期,
字符串[]时间,
字节[]天线,
字典[]迪克西,
字节[]输入,
字节[]状态,
字符串(ip);
/// 
///这是一个很好的例子。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
运行(newnotificationsample());
}
//建造师
公共通知示例()
{
初始化组件();
尝试
{
reader=新的FedmIscReader();
reader.SetTableSize(FedmIscReaderConst.BRM_TABLE,255);//每个通知最多有255个标记
taskOpt=新的FedmTaskOption();
}
捕获(fedmex异常)
{
Show(例如ToString());
返回;
}
}
//实际时间属性
专用字符串时间
{
得到
{
日期时间;
d=日期时间。现在;
字符串t;
//得到日期
如果(d.Month.ToString().Trim().Length==1)
{
t=“0”+d.Month.ToString().Trim()+“/”;
}
其他的
{
t=d.Month.ToString().Trim()+“/”;
}
如果(d.Day.ToString().Trim().Length==1)
{
t+=“0”+d.Day.ToString().Trim()+“/”;
}
其他的
{
t+=d.Day.ToString().Trim()+“/”;
}
t+=d.Year.ToString().Trim()+“”;
//抓紧时间
如果(d.Hour.ToString().Trim().Length==1)
{
t+=“0”+d.Hour.ToString().Trim()+”:“;
}
其他的
{
t+=d.Hour.ToString().Trim()+“:”;
}
如果(d.Minute.ToString().Trim().Length==1)
{
t+=“0”+d.Minute.ToString().Trim()+”:“;
}
其他的
{
t+=d.Minute.ToString().Trim()+“:”;
}
if(d.Second.ToString().Trim().Length==1)
{
t+=“0”+d.Second.ToString().Trim()+”;
}
其他的
{
t+=d.Second.ToString().Trim()+“;
}
if(d.millis秒.ToString().Trim().Length==1)
{
t+=“00”+d.millis秒.ToString().Trim()+”;
}
else if(d.millis秒.ToString().Trim().Length==2)
{
t+=“0”+d.millis秒.ToString().Trim()+”;
}
其他的
{
t+=d.毫秒.ToString().Trim()+“;
}
返回t;
}
}
/*****************************来自接口FedmTaskListener的方法*******************/
public void OnNewNotification(内部错误、字符串IP、uint端口号)
{
int i;
FedmBrmTableItem[]brmItems;
brmItems=(FedmBrmTableItem[])reader.GetTable(FedmIscReaderConst.BRM_表);
//来自delegateobject的声明
DelegateDisplayRecSets DisplayRecSetMethod=新的DelegateDisplayRecSets(DisplayRecSets);
object[]obj=新对象[11];
IAsyncResult结果;
如果(brmItems==null)
{
返回;
}
string[]serialnumber=新字符串[brmItems.Length];
字符串[]数据块=新字符串[brmItems.Length];
字符串[]日期=新字符串[brmItems.Length];
字符串[]时间=新字符串[brmItems.Length];
byte[]type=新字节[brmItems.Length];
字节[]antennaNr=新字节[brmItems.Length];
字节[]输入=新字节[brmItems.Length];
字节[]状态=新字节[brmItems.Length];
byte[]dbsize=新字节[brmItems.Length];
Dictionary[]dicRSSI=新字典[brmItems.Length];
长dbn;
字节dbadr;
字符串数据库;
对于(i=0;i