欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于C#?調(diào)用Dll?傳遞字符串指針參數(shù)的問題

 更新時間:2022年01月14日 10:38:03   作者:許明吉博客  
這篇文章主要介紹了C#?調(diào)用Dll傳遞字符串指針參數(shù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

最近用c#寫一個小軟件,要調(diào)用VC寫的dll,傳遞參數(shù)給dll,由于是非托管代碼,所以調(diào)用起來有點麻煩,要把參數(shù)轉(zhuǎn)換成非托管代碼的指針參數(shù),然后再傳遞給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文件按照指定的字段創(chuàng)建索引"   
        /// <summary>   
        /// 對DBF文件按照指定的字段創(chuàng)建索引   
        /// </summary>   
        /// <param name="m_strFileName">DBF文件路徑</param>   
        /// <param name="m_strFieldName">創(chuàng)建索引的字段名稱</param>   
        /// <param name="m_key">索引桶數(shù)(文件記錄的最大數(shù))</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;  
  
                //根據(jù)數(shù)據(jù)的長度申請非托管空間   
                ptrFileName = mallocIntptr(m_strFileName);  
                ptrFieldName = mallocIntptr(m_strFieldName);  
                ptrErr = mallocIntptr(300);  
  
                //創(chuàng)建索引   
                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 ) 根據(jù)數(shù)據(jù)的長度申請非托管空間"   
        /// <summary>   
        /// 根據(jù)數(shù)據(jù)的長度申請非托管空間   
        /// </summary>   
        /// <param name="strData">要申請非托管空間的數(shù)據(jù)</param>   
        /// <returns>指向非拖管空間的指針</returns>   
        private static IntPtr mallocIntptr( string strData )  
        {  
            //先將字符串轉(zhuǎn)化成字節(jié)方式   
            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>   
        /// 根據(jù)長度申請非托管空間   
        /// </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   
    }  

到此這篇關(guān)于C# 調(diào)用Dll 傳遞字符串指針參數(shù)的文章就介紹到這了,更多相關(guān)C# 字符串指針參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#圖形編程GDI+基礎(chǔ)介紹

    C#圖形編程GDI+基礎(chǔ)介紹

    這篇文章介紹了C#中的圖形編程GDI+,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C#結(jié)合JavaScript實現(xiàn)上傳視頻到騰訊云點播平臺的操作方法

    C#結(jié)合JavaScript實現(xiàn)上傳視頻到騰訊云點播平臺的操作方法

    這篇文章主要介紹了C#結(jié)合JavaScript實現(xiàn)上傳視頻到騰訊云點播平臺,上傳視頻功能,主要要解決兩個問題,一是在服務(wù)端通過C#生成簽名和SDKID,二是在客戶端通過JavaScript上傳視頻到騰訊云點播服務(wù)器,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • C#解析Lrc歌詞文件過程詳解

    C#解析Lrc歌詞文件過程詳解

    這篇文章主要為大家詳細(xì)介紹了C#解析Lrc歌詞文件過程,很有趣的解析過程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • C#異步編程由淺入深(三)之詳解Awaiter

    C#異步編程由淺入深(三)之詳解Awaiter

    這篇文章主要介紹了C#異步編程由淺入深(三)之詳解Awaiter,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 用C#來解析PDF文件

    用C#來解析PDF文件

    這篇文章主要介紹了用C#來解析PDF文件,同時作者也介紹了PdfFileAnalyzer這個應(yīng)用可以作為很好的成品示例,需要的朋友可以參考下
    2015-07-07
  • C#生成sitemap站點地圖的方法

    C#生成sitemap站點地圖的方法

    C#生成sitemap站點地圖的方法,需要的朋友可以參考一下
    2013-04-04
  • C# 委托(跨窗體操作控件)實例流程講解

    C# 委托(跨窗體操作控件)實例流程講解

    今天研究了一下,在C#里面卻是可以不用自定義消息這么復(fù)雜的方法來實現(xiàn)跨窗體調(diào)用控件,C#有更好的辦法就是委托。
    2013-03-03
  • C#實現(xiàn)設(shè)置或屏蔽熱鍵的方法詳解

    C#實現(xiàn)設(shè)置或屏蔽熱鍵的方法詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實現(xiàn)設(shè)置或屏蔽熱鍵,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#?壓榨cpu的辦法(推薦)

    C#?壓榨cpu的辦法(推薦)

    這篇文章主要介紹了C#?壓榨cpu的辦法,通過修改num的值,觀察cpu的核數(shù),例如我電腦是8核的,改成8,運行時各個核都能跑滿,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • C# 嵌入dll 的方法

    C# 嵌入dll 的方法

    這篇文章主要介紹了C# 嵌入dll 的方法,本文圖文并茂給大家及時的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07

最新評論