91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#調用Dll傳遞字符串指針參數的方法是什么

發布時間:2022-01-14 11:26:18 來源:億速云 閱讀:322 作者:iii 欄目:開發技術

本篇內容主要講解“C#調用Dll傳遞字符串指針參數的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C#調用Dll傳遞字符串指針參數的方法是什么”吧!

最近用c#寫一個小軟件,要調用VC寫的dll,傳遞參數給dll,由于是非托管代碼,所以調用起來有點麻煩,要把參數轉換成非托管代碼的指針參數,然后再傳遞給dllview plaincopy to clipboardprint?

using System.Runtime.InteropServices;   //操作Dll的類空間   
  
 class CGicomIndex  
    {  
        [DllImport("Index_dll.dll")]  
        unsafe private static extern Int32 create_index_file(IntPtr filename, IntPtr fieldname, UInt32 tongshu, IntPtr err);  
        //VC原型 create_index_file( char*filename, char * fieldname, unsigned long tongshu, char *err);  
 
        #region " bool CreateIndexFile( string m_strFileName, string m_strFieldName, UInt32 m_key, ref string strErr ) 對DBF文件按照指定的字段創建索引"   
        /// <summary>   
        /// 對DBF文件按照指定的字段創建索引   
        /// </summary>   
        /// <param name="m_strFileName">DBF文件路徑</param>   
        /// <param name="m_strFieldName">創建索引的字段名稱</param>   
        /// <param name="m_key">索引桶數(文件記錄的最大數)</param>   
        /// <param name="strErr">出錯信息</param>   
        /// <returns>成功 true</returns>   
        public static bool CreateIndexFile( string m_strFileName, string m_strFieldName, UInt32 m_key, ref string strErr )  
        {  
            try  
            {  
                IntPtr ptrFileName, ptrFieldName, ptrErr;  
  
                //根據數據的長度申請非托管空間   
                ptrFileName = mallocIntptr(m_strFileName);  
                ptrFieldName = mallocIntptr(m_strFieldName);  
                ptrErr = mallocIntptr(300);  
  
                //創建索引   
                if (create_index_file(ptrFileName, ptrFieldName, m_key, ptrErr) != 1)  
                {  
                    strErr = Marshal.PtrToStringAnsi(ptrErr);  
                    Marshal.FreeHGlobal(ptrFileName);  
                    Marshal.FreeHGlobal(ptrFieldName);  
                    Marshal.FreeHGlobal(ptrErr);  
                    return false;  
                }  
                Marshal.FreeHGlobal(ptrFileName);  
                Marshal.FreeHGlobal(ptrFieldName);  
                Marshal.FreeHGlobal(ptrErr);  
                return true;  
            }  
            catch (System.Exception ex)  
            {  
                strErr = ex.Message;  
                return false;  
            }  
        }  
        #endregion  
 
        #region " IntPtr mallocIntptr( string strData ) 根據數據的長度申請非托管空間"   
        /// <summary>   
        /// 根據數據的長度申請非托管空間   
        /// </summary>   
        /// <param name="strData">要申請非托管空間的數據</param>   
        /// <returns>指向非拖管空間的指針</returns>   
        private static IntPtr mallocIntptr( string strData )  
        {  
            //先將字符串轉化成字節方式   
            Byte[] btData = System.Text.Encoding.Default.GetBytes(strData);  
  
            //申請非拖管空間   
            IntPtr m_ptr = Marshal.AllocHGlobal(btData.Length);  
  
            //給非拖管空間清0    
            Byte[] btZero = new Byte[btData .Length+ 1]; //一定要加1,否則后面是亂碼,原因未找到   
            Marshal.Copy(btZero, 0, m_ptr, btZero.Length);  
  
            //給指針指向的空間賦值   
            Marshal.Copy(btData, 0, m_ptr, btData.Length);  
  
            return m_ptr;  
        }  
  
        /// <summary>   
        /// 根據長度申請非托管空間   
        /// </summary>   
        /// <param name="strData">要申請非托管空間的大小</param>   
        /// <returns>指向非拖管空間的指針</returns>   
        private static IntPtr mallocIntptr( int length )  
        {  
            //申請非拖管空間   
            IntPtr m_ptr = Marshal.AllocHGlobal(length);  
  
            //給非拖管空間清0    
            Byte[] btZero = new Byte[length + 1]; //一定要加1,否則后面是亂碼,原因未找到   
            Marshal.Copy(btZero, 0, m_ptr, btZero.Length);  
  
            //給指針指向的空間賦值   
            Marshal.Copy(btZero, 0, m_ptr, length);  
  
            return m_ptr;  
        }  
        #endregion   
    }

到此,相信大家對“C#調用Dll傳遞字符串指針參數的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

禄劝| 汤阴县| 银川市| 五寨县| 合作市| 崇义县| 高雄县| 寿宁县| 水城县| 泾阳县| 苗栗市| 武邑县| 仙居县| 金坛市| 长岭县| 罗江县| 广水市| 河南省| 津市市| 龙南县| 贡山| 安宁市| 镇平县| 临沂市| 庄河市| 辽中县| 宜良县| 大安市| 互助| 宁河县| 咸阳市| 南昌市| 镇雄县| 玉环县| 靖西县| 黑龙江省| 张家界市| 大厂| 通州区| 福清市| 宾阳县|