本帖最后由 wj0728 于 2011-01-21 15:44:52 编辑

解决方案 »

  1.   

    void* __stdcall AutoRun(callBack back,char *url = NULL);
    callBack back是如何定义的?
      

  2.   

    上面c++的写错了,应该his这样void* __stdcall AutoRun(callBack back,char *url = NULL);//callBack的定义
    typedef void (*callBack)(State);
    enum State
    {
      Connected,
      DisConnected,
      Change
    };
      

  3.   

    函数指针 其实应该是个 int ,他存放的是 callBack 这个函数的地址不知道我理解对不对
      

  4.   

    这是个回调函数,传入的参数其实就是让外部调用的方法和callback建立关联,从而来实现回调的功能
      

  5.   

    可能是枚举类的问题吧,能不能在
    public void StateChange(State st)
    {
        .....
    }
    中设置断点判断是否接收到了State
      

  6.   

    [DllImport("Device.dll")]
    public static extern void AutoRun(PointDelegate pd, string url);
    在这里指定所使用的函数名,指定编码格式,stringurl改为StringBuilder,有可能dll要写这块内存的,最后确定dll已经导出这个函数了
      

  7.   

    改为:public delegate void PointDelegate(short st); 试试
      

  8.   

    PointDelegate pd = new PointDelegate(StateChange);
    这一行定义的是局部变量,回头 pd 就是没用的指针了,pd在函数结束就会被回收,然后指向的委托也被回收,就异常了。你定义为成员变量。
    private PointDelegate pd = null;
    public void Init()
    {
        if(pd == null) pd = new PointDelegate(StateChange);
    }
      

  9.   

    void *则为“无类型指针”,void *可以指向任何类型的数据[DllImport("Device.dll")]
    public static extern IntPtr AutoRun(PointDelegate pd, string url);
    public delegate void PointDelegate(State st);
    public void StateChange(State st)
    {
        .....
    }//pd定义为全局变量,防止垃圾回收
    PointDelegate pd = new PointDelegate(StateChange);
    private void Init()
    {
      
        IntPtr p=AutoRun(pd, "www.baidu.com");
    }public enum State
    {
        Connected,
        DisConnected,
        Change
    }
    最好是看看C++代码,看下是怎么处理的
      

  10.   

    NND,原来是c++提供的dll内部出错了,现在已经解决了,谢谢