编写 DLL 最简单的办法是寻找你所需要的 DLL 或用途最接近的 DLL, 然后按照需求复制和编辑 C 语言源代码文件。Surface DLL位于zemax安装的根目录下面。如下是zemax手册对自定义面型的介绍。
用户自定表面 (UDS) 是一种强大、灵活、快速的面型定义方法,用于定义 OpticStudio 中没有的表面。 UDS 的形状可以是任意的,可以表示折射、反射、衍射,可以任意改变光束的相位,后面可以是均匀介质或是任意形态的渐变折射率介质。 此外, UDS 也可以任意切趾光束或衰减光束, 或使用 UDS 定义用于偏振分析的任一电场或膜层数据。后者能使光束按照任意公式/雷竞技下载找ray666点vip系统中任一表面用户自定义表格实现部分透射。
该功能非常灵活的原因所在是表面所有的性质都是用户在一个单独的 C 或 C++程序中定义的,该程序通过 Windows 的动态连接库 (DLL) 功能实现与 OpticStudio 动态链接。 DLL 必须包含返回OpticStudio 所需全部数据的函数, OpticStudio 用这些数据进行绘图、 光线追迹、 计算折射角以及通过折射率和表面介质位置之间的函数确定渐变折射率介质的折射率。
DLL 是汇编代码, 由于 OpticStudio 传递给 DLL 一个指针, 指向需要被计算的数据, 因此 UDS 的速度非常快,几乎与 OpticStudio 本身的代码一样快(函数调用只会导致计算机少量负担)。
UDS 功能强大,对 UDS 的使用有合理的代价。 对 UDS 的使用要求用户配备适当的、 能够产生兼容的 32 位 Windows DLLs(或 64 位,如果使用OpticStudio 的 64 位版本)的程序编译器或开发工具。同时也要求用户能够编写所需要的代码,更重要的是确保编码可靠、无需调试。为了使速度
最快, OpticStudio 几乎不核对 DLL 返回的数据,因此调试 UDS DLLs 很容易导致 OpticStudio 崩溃。
学习怎样创建 DLL 的最好方法是将示例 DLL 源代码文件复制到一个新的文件中,编辑这个示例文件来满足您的需要,然后重新进行汇编产生一个新的 DLL。 DLL 源代码中提供了一段很好的“ boiler plate”, 它是所有 DLLs 共有的。定义一个 UDS DLL 需要两个文件:一个诸如 MY_SURF.C 的 C(或 C++) 源代码文件,一个名为USERSURF.H 的头文件。只有 C 文件需要进行修改。 C 文件中定义了两个函数:第一个是“ DLLMain”, 用于(可选的)初始化 DLL 数据。另一个函数是“ User Define Surface4”,它一般对每个面型都要修改。早期版本的 OpticStudio 用户界面使用的函数名是“ User Defined Surface、User Defined Surface2 和 User Defined Surface3”,这些名字仍然支持但已经被废弃了。新的 DLL 文
件名应该使用“ User Defined Surface4”。OpticStudio 传递给函数两个结构,这些结构在 USERSURF.H 文件中定义。 USERSURF.H 文件定义
了一个在“ User Defined Surface3”中使用的数据结构,名为“ FIXED_DATA4”。 在 User Defined Surface4 函数中的是一个 C 语言“ Switch-case” 结构。 OpticStudio 通过传递“ 类型 (type)” 参数说明哪些数据需要计算并返回给 OpticStudio, 该参数是一个介于 0-10 之间的数( 包含 0 和 10)。下
面的表格中描述了类型码: