解决方案 »

  1.   

    C与C#还是有些差异的:
    C#不支持参数默认值,如果要实现相同功能,
    可以使用函数重载的方法模拟实现。
    例如:private void ShowMess(string message)  
    {  
        Color color = Color.White;  
    }  
      
    private void ShowMess(string message, Color color)  
    {  
    }  
      

  2.   

    void *pReserved=NULL,是作为函数的第三个参数,你的意思是重新定义一个该函数,在函数体内对intptr类型的 pReserved复制?那*pReserved=NULL,在函数体内怎么给他复制呢?直接声明为不带默认参数的版本可以么?
      

  3.   

    private void SetDataCallBack(int cameraId = 0, IntPtr pReserved = new IntPtr(), int len = 0)
      

  4.   

    申明的时候不要给默认值,在调用的时候给。
    int SetDataCallBack(DataCallBack fData, int cameraId, IntPtr pReserved, int len);调用的时候
    SetDataCallBack(CallbackMethod, 0, IntPtr.Zero, 0);
      

  5.   

    发现原函数的调用是这样子的:
    char ppRe[6] = {'e','e','e','e','e'};
    printf("sizeof(ppRe) =%d\n", sizeof(ppRe));
    m_CameraIndex[id] = cameraId;
    SetEventCallBack(CallbackEvent, cameraId, ppRe, sizeof(ppRe));
    我按照你的方法声明了:public static extern int SetEventCallBack(EventCallBack fEvent, int cameraId = 0, IntPtr pReserved = new IntPtr(), int len = 0);
    我的调用是这个样子的:
    char[] ppRe = new char[6];
    for (int i = 0; i < 5;i++ )
     {
            ppRe[i] = 'e';
    }
    int pLen = ppRe.Length;
     nRet = SDKMfcDll.SetEventCallBack(eventCallback,handle,ppRe,pLen);
    却提示:参数 3: 无法从“char[]”转换为“System.IntPtr”
      

  6.   

    发现原函数的调用是这样子的:
    char ppRe[6] = {'e','e','e','e','e'};
    printf("sizeof(ppRe) =%d\n", sizeof(ppRe));
    m_CameraIndex[id] = cameraId;
    SetEventCallBack(CallbackEvent, cameraId, ppRe, sizeof(ppRe));
    如果按照你的方法声明了,该怎么调用呢?谢谢
      

  7.   

    pReserved无非是要一个指针指向一个6字节的数据,可以用Marshal的方法帮助完成。
    byte[] data = new byte[] { 0x65, 0x65, 0x65, 0x65, 0x65, 0};   
    IntPtr pRe = Marshal.AllocHGlobal(data.Length);  // 分配6字节的非托管内存
    Marshal.Copy(data, 0, pRe, data.Length);SetEventCallBack(CallbackEvent, cameraId, pRe, data.Length);Marshal.FreeHGlobal(pRe);  // 用完以后别忘了释放