ZEMAX軟件技術(shù)應(yīng)用專題:如何編譯用戶自定義DLL
本文將介紹什么是用戶自定義DLL以及如何在Visual Studio中編譯用戶自定義DLL。本教程是基于Visual Studio Community 2017 version 15.9而創(chuàng)建的,但這些步驟在更早的版本中也適用,版本間變化指出均有記載。本文也會(huì)討論其他的編譯器。請(qǐng)注意本文不涉及如何編寫DLL。作者 Alexandra Culler, Michael Humphreys, Sandrine Auriol簡介OpticStudio專業(yè)版和旗艦版允許用戶使用C或C++程序建立他們自己的組件。有很多編譯器可以編譯C/C++代碼,其中很常用的是Visual Studio。本文將提供一步步的編譯DLL的指南。什么是用戶自定義DLL?OpticStudio可以通過用戶自定義DLL來訂制。
在序列模式中,表面定義了光學(xué)材料的界面。表面類型可以是折射、反射、衍射或者漸變折射率。OpticStudio支持超過65種不同的表面類型,包括非常普適的面型包括多項(xiàng)式面型和雙錐Zernike。
然而,很多時(shí)候用戶依舊希望可以根據(jù)他們的具體需求訂制一些功能。這就是用戶自定義面型有用且強(qiáng)大的地方了,因?yàn)镺pticStudio包含使用它的界面。在非序列模式中,物體定義了光學(xué)材料的界面。物體擁有帶有材料屬性的幾何形狀,且可以有面(face)來折射或者散射光線。材料也可以散射光線。物體也可以是個(gè)光源。OpticStudio有針對(duì)上述所有類型的內(nèi)建的物體和屬性。在非序列模式中。所有的這些都可以通過以下的DLL來訂制:用戶自定義物體、GRIN檔案、衍射算法、體散射算法、用戶自定義光源。
注意:對(duì)于老的Visual Studio,可能需要安裝的額外的64位編譯程序包,具體步驟請(qǐng)見本文:Windows SDK 7.1。下載后,找到Tools…Options…Environment…Projects and Solutions。在該窗口勾選“Show advanced build configurations”且保證設(shè)置如下:
(Tools…Options和“Project Properties”對(duì)話框里的不一樣。)編譯DLL一般設(shè)置DLL文件(Dynamic Link Library)是Visual Studio的一種輸出類型。為了建立一個(gè)DLL,我們先創(chuàng)建project space來放置代碼。在Visual Studio種找到File…New…Project。
在Visual C++選項(xiàng)下,選擇Windows Desktop Wizard項(xiàng)目類型。
接著選擇Application類型為“Dynamic Link Library (.dll):
當(dāng)項(xiàng)目(project)創(chuàng)建好之后,第一件要做的事情是改變build type。找到Build…Configuration Manager…在Configuration Manager中,我們把solution configuration設(shè)置為“Release”,以便在代碼運(yùn)行后獲取一個(gè)DLL。選項(xiàng)platform需設(shè)為“x64”。這意味著代碼只會(huì)兼容64位系統(tǒng)和應(yīng)用程序。
接下來,添加Source File。Source File必須是CPP類型,所以選擇“New Item…”并選擇C++ File。
在文件下{Zemax}\DLL下,有很多可以參照的用戶自定義代碼的示范文件。如果要使用其中某個(gè)文件,把其代碼復(fù)制到剛才新建的C++ Source File中。當(dāng)案例文檔載入后,一些項(xiàng)目屬性需要修改。右鍵點(diǎn)擊項(xiàng)目名稱并選擇“Properties”。
在Configuration Properties…General中,確保“Configuration Type”已經(jīng)設(shè)為“Dynamic Library (.dll)”,并且把“Character Set”設(shè)置為“Use Multi-Byte Character Set”。
注意:更早版本的Visual Studio會(huì)需要本文開頭提到額外下載包,且需要設(shè)置它門的“Platform Toolset”為Windows7.1SDK。然后,在Configuration Properties…C/C++…Code Generation選取“Runtime Library”。一般地,我們推薦使用Multi-threaded (/MT)或者M(jìn)ulti-threaded DLL (/MD)。Multi-threaded與Multi-threaded DLL之間的選擇比較復(fù)雜,但大體上是兼容性和易用性之間的選擇。如果該用戶自定義DLL不依賴于其他庫(library),那么使用Multi-Threaded runtime library意味著不考慮在本電腦上安裝使用該DLL的C++ redistributable。如果在本DLL中,需要用到其他的庫,那么就需要在此選取那個(gè)runtime庫,而在絕大多數(shù)情況下,它都是Multi-Threaded DLL runtime。對(duì)于簡單的不調(diào)用第三方庫的DLL,Multi-threaded runtime是最佳選擇。
一旦以上設(shè)定宣告完畢,點(diǎn)擊OK來退出Properties對(duì)話框。檢查代碼錯(cuò)誤現(xiàn)在,我們來檢查并確保所有內(nèi)容都能被母代碼識(shí)別。如果該DLL是個(gè)用戶自定義表面且source file路徑不在{Zemax}\DLL\Surfaces文件夾,那么頭文件“usersurf.h”會(huì)不被認(rèn)可(由紅色下劃線表征)。
為修正這個(gè)問題,直接把 {Zemax}\DLL\Surfaces下面的“usersurf.h”復(fù)制并粘貼到source code同一個(gè)路徑下,然后右鍵點(diǎn)擊“Header Files”來載入頭文件并導(dǎo)入現(xiàn)有的代碼中。
當(dāng)頭文件載入到正確的路徑后,紅色下劃線應(yīng)該就不再出現(xiàn)了。如果有任何內(nèi)容未被讀出,那么該DLL可能不能編譯。即使編譯了,也未必能正常運(yùn)行。使用C++編譯器絕大部分Zemax自帶的案例文件都是用C語言寫的。由于Visual Studio是個(gè)C++編譯器,這意味著必須對(duì)代碼進(jìn)行一些修改來正確地編譯它們。如果還沒添加。那么在代碼開頭的初始化功能區(qū)放入“extern “C” {}”。同時(shí)確保把“BOOL WINAPI DllMain”這一行注釋掉。
在C++編譯器里,程序(function)名往往會(huì)在后臺(tái)被修改,以使得每個(gè)程序都有其唯一的標(biāo)識(shí)。如果程序名變化了,那么OpticStudio會(huì)無法運(yùn)行該DLL,因?yàn)镺pticStudio會(huì)尋找具體的名稱(例如:UserDefinedSurface、UserObjectDefinition等)采用上述改變可以強(qiáng)制編譯器保持原來C代碼里的程序名且忽略任何可能造成的錯(cuò)誤。同樣地,可能也會(huì)需要無視由于C和C++的細(xì)微不同造成的警告,例如:C4996: ‘srtcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.如果這是編譯中唯一遇到的警告,那么以下的代碼可以繞過這個(gè)問題:#pragma warning ( disable : 4996 )
這行代碼會(huì)允許編譯器提供特定于電腦或者操作系統(tǒng)的功能,同時(shí)保持C和C++語言上大體的兼容性。Rebuild Solution選擇Build…Rebuild Solution來編譯你的代碼,或者直接按鍵盤“Ctrl+F5”。編譯成功后會(huì)輸出以下內(nèi)容:
這個(gè)DLL會(huì)在solution文件夾下。對(duì)于“My_Surface”這個(gè)項(xiàng)目而言,該DLL會(huì)在{Project directory}\My_Surface\x64\Release。
把這個(gè)DLL放在爭取的{Zemax}\DLL\ 文件夾下,OpticStudio就能讀取并使用它了。編譯器以下版本的Visual Studio都可以用來編譯OpticStudio的用戶自定義DLL:
2005, 2008
Express 2010, Express 2012
Community 2017, Community 2019. 請(qǐng)閱讀本網(wǎng)頁來了解使用條件。
Ansys Zemax國內(nèi)可靠代理商
光研科技南京有限公司是國內(nèi)可靠的光學(xué)軟件和儀器光電供應(yīng)商,提供企業(yè)定制化上門培訓(xùn)服務(wù),承接各類光學(xué)設(shè)計(jì)項(xiàng)目,并有一系列自主編寫出版的光學(xué)設(shè)計(jì)書籍。公司擁有一支高素質(zhì)、高水平、實(shí)戰(zhàn)經(jīng)驗(yàn)豐富的管理,銷售以及研發(fā)團(tuán)隊(duì),從成立到現(xiàn)在已經(jīng)為廣大企業(yè),研究所以及高校提供了很多優(yōu)秀的產(chǎn)品和服務(wù),是光電圈內(nèi)值得信賴的企業(yè)。追光逐夢(mèng),研以致用!以用戶的需求為起點(diǎn),為客戶提供有價(jià)值的光學(xué)產(chǎn)品和服務(wù)一直都是光研科技南京有限公司的宗旨。
AnsysZemax光學(xué)軟件咨詢與訂購聯(lián)系方式
聯(lián)系人:南京光研 徐保平
手機(jī)號(hào):15051861513
微信號(hào):13627124798
您也可以掃一掃下面的二維碼直接咨詢

工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP




















