[發明專利]一種用于加載動態鏈接庫的代碼自動生成方法及裝置有效
| 申請號: | 201410567835.5 | 申請日: | 2014-10-22 |
| 公開(公告)號: | CN104317589B | 公開(公告)日: | 2017-08-25 |
| 發明(設計)人: | 邱田華;宋斌;劉毅;吳波;方鵬;鄭艷梅;譚旭 | 申請(專利權)人: | 中國電子科技集團公司第四十一研究所 |
| 主分類號: | G06F9/44 | 分類號: | G06F9/44 |
| 代理公司: | 北京天奇智新知識產權代理有限公司11340 | 代理人: | 陳永寧 |
| 地址: | 266555 山東省*** | 國省代碼: | 山東;37 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 用于 加載 動態 鏈接 代碼 自動 生成 方法 裝置 | ||
技術領域
本發明屬于代碼自動生成技術領域,尤其涉及的是一種用于加載動態鏈接庫的代碼自動生成方法及裝置。
背景技術
加載DLL分為靜態加載和動態加載兩種方式。靜態加載方式包含三種靜態加載方法:
(1)手動編寫加載DLL代碼,不同語言采用的步驟也不一樣:在C語言下添加對LIB文件的引用,并重新定義需要調用的函數和常量,函數和常量的定義和DLL對應的頭文件中的定義類似,只是參數類型改為當前編程語言下的類型;在C#語言下,創建一個類,在類中聲明和頭文件中函數對應的定義;
(2)在美國國家儀器公司的LabWindows CVI下,裝載DLL對應的FP文件實現自動加載;
(3)在微軟公司的Microsoft Visual Studio集成開發環境中,添加美國國家儀器公司的Measurement Studio下的儀器驅動向導文件模板,選擇DLL對應的FP文件,把FP文件中的函數定義和常量定義都自動生成加載代碼。
動態加載DLL方法對應于不同的目標語言,具有不同的加載步驟。對應同一種編程語言下,加載步驟通常是一定的。例如對應于C語言下的加載步驟有:
創建一個函數聲明,其參數數據類型要與調用的DLL頭文件定義的函數原型相吻合;
通過Win32 API函數LoadLibrary()顯式的調用DLL,此函數返回DLL的實例句柄;
通過Win32 API函數GetProcAddress()獲取要調用的DLL的函數地址,把結果賦給自定義函數的指針類型;
使用函數聲明來調用DLL中的函數;
最后調用完成后,通過Win32 API函數FreeLibrary()釋放DLL函數。
在C#語言下的加載步驟有:
定義一個委托聲明,其參數數據類型要與調用的DLL頭文件定義的函數原型相吻合;
創建委托聲明的委托變量;
通過Win32 API函數LoadLibrary()顯式的調用DLL,此函數返回DLL的實例句柄;
通過Win32 API函數GetProcAddress()獲取要調用的DLL的函數地址,把結果賦給委托變量;
使用委托來調用DLL中的函數;
最后調用完成后,通過Win32 API函數FreeLibrary()釋放DLL函數。
綜上所述,編寫加載DLL的代碼的過程,核心的工作是得到DLL內部的函數定義和常量定義列表;然后把函數和常量定義中的參數類型轉換為目標編程語言下的參數類型;最后根據編程語言和加載方式,確定加載步驟,編寫或生成加載代碼。
目前的加載DLL的方法通常采用手動編碼實現和利用第三方軟件工具自動加載實現。
對應于采用手動編碼實現DLL加載的方法,首先需要對目標編程語言下的加載DLL的靜態、動態兩種方式步驟有所了解,并熟悉不同編程語言的參數類型間的轉換,提高了軟件人員的專業要求;當DLL有更新時,需要軟件人員手動的修改加載代碼;當需要在新的語言下加載動態連接庫時,需要軟件人員重新編寫加載代碼實現。綜上所述,手動編寫加載DLL代碼的方式,增加了軟件人員的專業要求和工作量,造成人力資源的巨大浪費,降低軟件人員的開發效率。
對應于利用第三方軟件工具自動實現DLL加載的兩種方法,都依賴于CVI生成的FP文件,并且都只能靜態方式加載DLL。對應第一種方法,只支持CVI下對CVI編寫的DLL的加載。第二種方法雖然支持多種目標語言對DLL的封裝,但是依賴于Microsoft Visual Studio,并且只能生成Microsoft Visual Studio所支持編程語言的加載代碼;并且自動生成代碼的過程有一部分的局限性,每次都是把FP文件中的所有函數和常量都進行封裝,不支持選擇需要封裝函數與常量的列表。
因此,現有技術存在缺陷,需要改進。
發明內容
本發明所要解決的技術問題是針對現有技術的不足,提供一種用于加載動態鏈接庫的代碼自動生成方法及裝置。
本發明的技術方案如下:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國電子科技集團公司第四十一研究所,未經中國電子科技集團公司第四十一研究所許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410567835.5/2.html,轉載請聲明來源鉆瓜專利網。





