public delegate IntPtr CommOpen(StringBuilder Port);
这个方法是用来对串口进行打开,问题是,如何在代码中调用这个方法,看了很多帖子写的相当复杂让我甚是纠结
给位,写个具体的实现方法让咱学习学习!

解决方案 »

  1.   

    这个委托很不咋滴。
    首先,传进来的参数用string就可以了,其次,如果是委托。命名和函数容易混淆。
    打开关闭应该是方法,委托是相当于一种函数签名。
      

  2.   

    public delegate void Del(string message);
    public static void DelegateMethod(string message)
    {
        System.Console.WriteLine(message);
    }
    Del handler = DelegateMethod;// Call the delegate.
    handler("Hello World");
      

  3.   

    这是引用的一个dll的api函数,只许用StringBuilder,不然无法调用会报错
      

  4.   

    这谁写的啊?参数是StringBuilder,返回值还是IntPtr...看样子是封装了一个第三方native dll....NET直接提供托管的串口操作类,你为什么非要用它的?给个理由先...
      

  5.   

    打开串口需要用到这个操作,这是我们经理封装的dll,参数是stringbuilder不用string的原因是防止与避免在操作时报错,而且按照提供的api函数最适合用stringbuilder,返回类型用intptr的原因是它返回的是一个指针!
      

  6.   

    委托只是一种类型,告诉你 CommOpen 的调用语法而已,你应该还有一个类型的方法需要这样一个类型的参数吧
      

  7.   

    额,我咋觉着这是pinvoke的写法呢?而且视乎是为了回调函数写的东西不太明白啊,串口操作本身就是net自带的功能,没必要借用p/invoke操作的具体啥是委托我也不说了,上面说的很清楚了,如果你想知道回调函数如何用可以自己google “p/invoke 回调函数处理”这方法资料很多,比我在这里敲的要详细多了
      

  8.   


    delegate只是定义了一个类型(叫做CommOpen),它可以用来执行一个或者多个方法,但是至于方法到底是什么,根本不是这个CommOpen内部定义的。
      

  9.   

    看看 msdn 上的例子:http://msdn.microsoft.com/zh-cn/library/system.delegate(v=vs.80).aspx虽然在第一行就定义了类型 myMethodDelegate,但是至于它的实力调用的是什么方法,只有在为变量myD1 和 myD2 赋值时才设置的。定义 myMethodDelegate 时,跟方法内容毫无关系。回到lz的问题,如果你认为delegate就是定义一个方法,是完全误解了。delegate只是用来定一个class,它可以用来引用方法,而跟方法具体是什么毫无关系。
      

  10.   

    另外建议把委托声明 更名为 “CommOpen_CallBack”这样楼下的人才会把讨论集中在“回调函数”身上,而不是像楼上那样讨论一个无甚意义的委托概念上