RT,求详细解答,谢谢

解决方案 »

  1.   

    回调 函数,委托监视的方法(事件)在执行,,一般这个方法都是运行在辅助纯种里的,这个方法有返回值,则要定义一个回调函数去接收这个值,用于监视方法的执行情况。
    引用外部DLL,右击引用--》添加引用,找到DLL路径,不就把DLL程序集里的东西引用到项目中了么
     #region 异步通知:委托
            delegate void WorkStarted();
            delegate void WorkProgressing();
            delegate int WorkCompleted();        class Worker
            {
                //委托监视的事件
                public event WorkStarted started;
                public event WorkProgressing progressing;
                public event WorkCompleted completed;            public void DoWork()
                {
                    Console.WriteLine("工作: 工作开始");
                    if (started != null) started();                Console.WriteLine("工作: 工作进行中");
                    if (progressing != null) progressing();                Console.WriteLine("工作: 工作完成");
                    /************************************************
                     * 不幸地,彼得有回到了一开始就想避免的情况中来,比如,老板站在背后盯着他工作。
                     * 于是,他决定使用自己的委托 作为 他调用的 异步委托完成的通知,让他自己立即回到工作,
                     * 但是仍可以在别人给他的工作打分后得到通知:
                     ************************************************/
                    if (completed != null)
                    {
                        foreach (WorkCompleted wc in completed.GetInvocationList())
                        {
                            wc.BeginInvoke(new AsyncCallback(WorkGraded), wc);//此是你要看,WorkGraded就是回调函数
                        }
                    }
                }
                private void WorkGraded(IAsyncResult res)//
                {
                    WorkCompleted wc = (WorkCompleted)res.AsyncState;
                    int grade = wc.EndInvoke(res);
                    Console.WriteLine("工人的工作得分=" + grade);
                }
            }        class Boss
            {
                public int WorkCompleted()
                {
                    System.Threading.Thread.Sleep(3000);
                    Console.WriteLine("Better...");
                    return 6; /* 总分为10 */
                }
            }        class Universe
            {
                static void WorkerStartedWork()
                {
                    Console.WriteLine("Universe notices worker starting work");
                }            static int WorkerCompletedWork()
                {
                    System.Threading.Thread.Sleep(4000);
                    Console.WriteLine("Universe pleased with worker~s work");
                    return 7;
                }
                static void Main()
                {
                    Worker peter = new Worker();
                    Boss boss = new Boss();
                    peter.completed += new WorkCompleted(boss.WorkCompleted);
                    peter.started += new WorkStarted(Universe.WorkerStartedWork);
                    peter.completed += new WorkCompleted(Universe.WorkerCompletedWork);
                    peter.DoWork();                Console.WriteLine("Main: 工人工作完成");
                    Console.ReadLine();
                }
            }
            #endregion
      

  2.   

    回调函数就是把一个方法的传给另外一个方法去执行
    public delegate string ProcessDelegate(string s1, string s2);
    public string Process(string s1,string s2,ProcessDelegate process)
            {
                return process(s1, s2);
            }
            public string Process1(string s1, string s2)
            {
                return s1 + s2;
            }
    使用 DllImport 属性通过调用 
      

  3.   

    如何调用外部的dll
    1、如果这个dll不是.net编写的,则参考这个:
    http://blog.csdn.net/tangl_99/archive/2006/09/06/1182354.aspx2、如果这个dll是.net编写的,直接添加对这个dll的引用,就可以使用dll里面定义的类型了至于回调函数,请看:

    什么是回调函数?
      简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。为什么要使用回调函数?  因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。  如果想知道回调函数在实际中有什么作用,先假设有这样一种情况,我们要编写一个库,它提供了某些排序算法的实现,如冒泡排序、快速排序、shell排序、shake排序等等,但为使库更加通用,不想在函数中嵌入排序逻辑,而让使用者来实现相应的逻辑;或者,想让库可用于多种数据类型(int、float、string),此时,该怎么办呢?可以使用函数指针,并进行回调。  回调可用于通知机制,例如,有时要在程序中设置一个计时器,每到一定时间,程序会得到相应的通知,但通知机制的实现者对我们的程序一无所知。而此时,就需有一个特定原型的函数指针,用这个指针来进行回调,来通知我们的程序事件已经发生。实际上,SetTimer() API使用了一个回调函数来通知计时器,而且,万一没有提供回调函数,它还会把一个消息发往程序的消息队列。  另一个使用回调机制的 API函数是EnumWindow(),它枚举屏幕上所有的顶层窗口,为每个窗口调用一个程序提供的函数,并传递窗口的处理程序。如果被调用者返回一个值,就继续进行迭代,否则,退出。EnumWindow()并不关心被调用者在何处,也不关心被调用者用它传递的处理程序做了什么,它只关心返回值,因为基于返回值,它将继续执行或退出。  不管怎么说,回调函数是继续自C语言的,因而,在C++中,应只在与C代码建立接口,或与已有的回调接口打交道时,才使用回调函数。除了上述情况,在C++中应使用虚拟方法或函数符(functor),而不是回调函数。
      

  4.   

    1.回调函数就是函数的指针
    2.如果是平台调用可以参考http://www.pinvoke.net/
      

  5.   

    可以把DLL理解成为一个命名空间,如果要调用外部的DLL,则首先要添加此DLL的引用,然后在程序中也不要忘记添加using namespace "xxx"
      

  6.   

    所谓回调,就是不是你调用它,而是系统自己调用它。你写的代码里主动调用的方法那不是回调函数,但类似与你的事件处理函数就是回调函数了,系统得到一个事件的发生后,主动来调用你的事件处理函数。
    至于DLL,那你的程序引用它,就可以直接用了,如果你的外部DLL是指没有引用,那么你还可以通过反射在运行的时候加载它
      

  7.   

    把你的DLL放程序bin目录下,如果是WinForm就放Bin\Debug目录下 ,实在不行就放C:\Windows\system32目录下。