C#调用C语言dll方法

  • C#调用C语言DLL接口声明
  • 
    /**
     * 注册事件回调函数原型
     * @param errCode 事件对应的错误码
     * @param param   注册时传递的参数
     * typedef void (*DataSyncEventCallback)( unsigned long errCode, void *param );
    */
    public delegate void DataSyncEventCallback(UInt32 errCode, byte[] param);
    
    
    /**
     * 初始化函数,使用其余函数时必须调用
     * COW_DLL_API int DataSyncInit(void); 
     */
    [System.Runtime.InteropServices.DllImport("DataSyncDsk.dll")]
    public static extern int DataSyncInit();
    
    /**
     * 结束函数,用于释放可能用到的资源
     * COW_DLL_API void DataSyncExit(void);
     
     */
    [System.Runtime.InteropServices.DllImport("DataSyncDsk.dll")]
    public static extern void DataSyncExit();
    
    
    /**
     * 注册事件函数
     * @param func  事件回调处理函数
     * @param param 调用回调函数时的参数
     * COW_DLL_API int DataSyncRegisterEventCallBack( 
                            DataSyncEventCode ev, DataSyncEventCallback func );
     */
    [System.Runtime.InteropServices.DllImport("DataSyncDsk.dll")]
    public static extern Int32 DataSyncRegisterEventCallBack(
                        DataSyncEventCode ev, DataSyncEventCallback func);
  • 以上的C语言DLL的名称为DataSyncDsk.dll,其中DataSyncEventCallback为C语言回调函数接口托管声明,但其用于新建的托管需为静态变量,以防止被自动垃圾回收器回收
  • public delegate void DataSyncEventCallback(UInt32 errCode, byte[] param);
  • 接口使用示例
  • // 回调函数声明
    private static CowDataUpdataInterface.DataSyncEventCallback m_hFileOp;
    
    // 回调函数注册
    m_hFileOp = new CowDataUpdataInterface.DataSyncEventCallback(this.onFileOpHandle );
    
    CowDataUpdataInterface.DataSyncRegisterEventCallBack(
            CowDataUpdataInterface.DataSyncEventCode.DATASYNC_EVENT_FILE_OP_FINISH, m_hFileOp );
    
    // 普通函数调用
    ASCIIEncoding ascii = new ASCIIEncoding();
    string strPath = "E:\\fuck\\";
    Byte[] bytePath = ascii.GetBytes(strPath);
    CowDataUpdataInterface.DataSyncMobinDir2Pc( bytePath);

转载于:https://www.cnblogs.com/shanwenbin/archive/2012/10/17/2727477.htmlhtml