ZEMAX | ZOS-API、ZPL 和 DLL 之间的区别

本文对 ZOS-API、ZPL 和DLL 进行了比较。我们将会对与 OpticStudio 的互联、代码执行、语句和数据存取与处理这些方面进行解释说明。

概述

在 OpticStudio 中,用户可以通过编程(Programming) 选项卡访问 OpticStudio 的编程功能,如 Zemax编程语言( ZPL )、应用程序编程接口( ZOS-API )和动态链接库 ( DLL )。每种编程方法都有其独特的特点。本文描述了这三种编程功能的特点和区别。

ZOS-API 和 ZPL之间的区别

ZOS-API 和 ZPL 在许多方面都有所不同,包括它们的语句、应用程序和运行环境。以下部分将提供这两种编程方法的概述,并详细描述这些差异。

什么是 ZOS-API?

ZOS-API 是一个应用程序接口,它是为使 OpticStudio 能够支持与其它应用程序的连接和自定义而开发的。虽然 ZOS-API 依赖于 COM 接口,但它来源于.NET库,因此可以使用任何能够访问API库的编程语言(如C++、C#、Python、MATLAB) 进行 API 编程。ZOS-AP I允许应用程序与 OpticStudio 中打开的实例直接交互,或者将 OpticStudio 作为背景程序运行。

什么是 ZPL?

Zemax 编程语言( ZPL )是一种宏语言,它允许用户在 OpticStudio 中直接编写自己的程序。ZPL 可以:

· 自动地重复键盘和鼠标操作

· 基于 OpticStudio 数据执行计算

· 以特定格式导出数据

不同之处

以下为 ZOS-API 与 ZPL 之间最基本的差别。

1、接口

ZPL 宏是一个文本文件。可以在 OpticStudio 内的 ZPL 编辑器中创建和编辑ZPL 宏。ZPL 宏很容易学习,不需要任何编程经验,并且在其中提供了能够执行一系列命令的强大工具。下面的截图显示了 ZPL 编辑器中的 ZPL 宏。

ZOS-API 应用程序是用可以访问 API 库的编程语言编写的。ZOS-API 支持四种编程语言:MATLAB、Python、C++ 和 C#。下方截图显示了用于连接至 ZOS-API的 Matlab 代码。

2、代码执行

ZPL 宏在 OpticStudio 图形用户界面( GUI )中运行。要执行或编辑 ZPL 宏,请单击:编程( Programming )> ZPL 宏( ZPL Macros )>编辑/执行 (Edit/Run)。

ZOS-API 应用程序的执行取决于使用的模式:

· 独立应用程序(A Standalone Application) 模式是一个外部可执行文件(.exe),它将启动一个全新的 OpticStudio 实例作为背景程序。在这种模式下,OpticStudio 作为服务器运行,没有用户界面。必须小心确保运行实例数量没有达到 OpticStudio 许可运行的最大数量。

· 自定义扩展(User Extension)或自定义分析( User Analysis) 模式是从OpticStudio 内置的GUI中启动的,可构建类似于扩展程序的应用程序。它们可以通过编程(Programming)> ZOS-API.NET接口( ZOS-API.NET Applications)> 自定义分析/扩展 (User Analyses/Extensions)来访问的。

· 交互扩展 (Interactive Extension )从编程(Programming)>ZOS-API.NET 接口(ZOS-API.NET Applications)>交互扩展(Interactive Extension)打开。它可以将外部的 ZOS-API 应用程序连接到 OpticStudio的现有实例。

3、语法

ZPL 是一种可编译的“宏”或“脚本”语言,类似于带有光线追迹函数BASIC编程语言 。

所有 ZOS-API 程序和扩展都是用 C#、C++、MATLAB 或 Python 等外部编程语言编写的。

4、数据存取和处理

ZPL 宏由存储在文本文件中的一系列命令组成。这些命令可以给变量(数值或字符串)赋值、使用关键字调用函数或进行注释。在 ZPL 中,所有数据存取和处理都基于已定义的命令。ZPL 作为解译型代码,在运行复杂计算时,它可能比完全编译的代码慢。

在 ZOS-API 中,数据存取和数据处理更加灵活和强大。ZOS-API 可以利用其它高级编程语言(如 MATLAB)的数值分析和矩阵计算能力。

5、互用性

ZPL 不能通过 ZOS-API 调用,反之亦然。

6、对比表格

ZOS-API 和 DLL 的区别

什么是 DLL?

动态链接库 (Dynamic Link Library,DLL) 是一个共享库。它是一个 Windows 程序,但不能像 EXE 程序那样直接运行。它可以被另一个程序调用,即我们的OpticStudio。DLL 根据需要调用,并在完成时关闭。只在需要时使用DLL,使得内存管理方面更高效。在 OpticStudio 中,发送到 DLL 的数据是指定且有一定限制的。存在不同类型的 DLL,如用户自定义表面、用户自定义散射配置文件等。对于每种类型的 DLL,可以在文件夹 {Zemax } / DLL下的示例 DLL 源代码中找到数据结构。

不同之处

ZOS-API 和 DLL 之间最根本的区别是客户端-服务器角色是相反的。

· ZOS-API 脚本是一个客户端,它调用 OpticStudio 作为服务器来执行任务。ZOS-API 脚本可以访问 OpticStudio 接口,并且 OpticStudio 内几乎所有方面的功能都可以通过 ZOS-API 脚本访问和运行。API 脚本还包含其他功能,比如批量处理光线追迹 (Batch Ray Trace)等。

· DLL 充当服务器。OpticStudio 客户端将指定数据发送给 DLL 或从 DLL 获取指定数据,并最终将这些数据返回至 OpticStudio 中。因此,OpticStudio 仅负责数据交换,由此限制了 DLL 的操作范围。

ZEMAX | ZOS-API、ZPL 和 DLL 之间的区别相关推荐

  1. Activex、OLE、COM、OCX、DLL之间区别、联系

    转自:http://baike.baidu.com/view/393671.htm 概述 .ocx是ocx控件的扩展名,与.exe .dll同属于PE文件.下面说说什么是ocx控件! OCX 是对象类 ...

  2. Windows Dll Injection、Process Injection、API Hook、DLL后门/恶意程序入侵技术

    catalogue 1. 引言 2. 使用注册表注入DLL 3. 使用Windows挂钩来注入DLL 4. 使用远程线程来注入DLL 5. 使用木马DLL来注入DLL 6. 把DLL作为调试器来注入 ...

  3. MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题

    这个话题要从哪里说起呢.博主小白一个,最近调试程序时(WIN-MSVC)连一些基本问题都没弄懂,本着遇见问题一定要解决的原则,下面来说下MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题 ...

  4. ZEMAX | 如何编写 ZPL 宏:计算环带垂轴色差

    ZEMAX | 如何编写 ZPL 宏:计算环带垂轴色差 本文介绍如何使用 Zemax 编程语言 (ZPL) 创建宏来计算和绘制用户自定义的性能指标.在本示例中,系统的环带垂轴色差 (Zonal Tra ...

  5. mysql.lib 是mtd mdd_MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题

    这个话题要从哪里说起呢.博主小白一个,最近调试程序时(WIN-MSVC)连一些基本问题都没弄懂,本着遇见问题一定要解决的原则,下面来说下MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题 ...

  6. API 与 SDK 之间的区别

    很多人在软件开发中经常会分不清 SDK 与 API ,今天就来浅谈一下两者之间的区别. 直白地说,SDK 包含了 API ,是一套完整的,能完成更多功能的工具包,无论你想获取什么样的信息,SDK 里总 ...

  7. java中separator_java - File.separator和路径中的斜杠之间的区别

    java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...

  8. 机器学习、数据科学、人工智能、深度学习和统计学之间的区别!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Vincent Granville,来源:机器之心 在这篇文章中, ...

  9. 2.javascript之缓存 localStorage 和sessionStorage之间的区别

    2018-08-04 前言 今天做项目的时候遇到了这个问题,用户登录成功之后如何改变将登录的链接切换为用户名 解决方案:使用了sessionstorage缓存 和js的onload加载事件 用户登录成 ...

最新文章

  1. MySQL 如何创建索引?怎么优化?
  2. python安装包为什么这么小-为什么你的Python包老是装不上?收下这个网站就对了...
  3. mysqlsla的使用
  4. java青蛙青蛙跳井_速解青蛙跳井问题
  5. signalr 连接数量的限制_LED灯珠常用的连接方式优缺点分析!
  6. ubuntu chrome 无法从该网站添加应用,拓展程序或脚本
  7. ubuntu在线安装和卸载libusb
  8. SEO的有利因素跟不利因素
  9. Spring MVC Boot Cloud 技术教程汇总(长期更新)
  10. 计算机网络(十)-数据链路层-差错控制
  11. STM32那点事(5)_ADC(中)
  12. 《领域驱动设计:软件核心复杂性应对之道(修订版)》—第2章 2.3节一个团队,一种语言...
  13. C++ —— string函数
  14. 【电子签章】HTML格式合同转化成PDF文件
  15. ubantu 20.04 系统重装
  16. linux 校园网 自动认证,使用 Padavan 路由器实现校园网自动 Web 认证
  17. 计算机维护费可以跨年吗,税控技术维护费跨年可以抵扣吗_增值税
  18. Git关联多个远程仓库
  19. Datatable 列名
  20. 怎么减少计算机内存占有,还在为电脑内存占用太高而烦恼吗?教你一招轻松解决...

热门文章

  1. 城市信息area.js
  2. 分支分歧(branch divergence)造成SIMT性能降低的原因
  3. SIMT ( Single Instruction Multiple Threads)
  4. 数字图像处理9--尺度空间
  5. tinyint(1)和tinyint(4)的区别和用法
  6. jndi weblogic mysql_在WebLogic新建针对Oracle数据库的JNDI数据源
  7. poj 1718 River Crossing
  8. RTP/RTCP 和 SRTP/SRTCP协议
  9. 90% 前端都会的 ES6 简化代码技巧,你用过哪些
  10. 纪念一位大师中的大师