切换到宽版
  • 广告投放
  • 稿件投递
  • 繁體中文
  • 如何编译用户自定义DLL

    作者:Zemax China 来源:投稿 时间:2020-05-20 17:08 阅读:12671 [投稿]
    本文将介绍什么是用户自定义DLL以及如何在Visual Studio中编译用户自定义DLL。本教程是基于Visual Studio Community 2017 version 15.9而创建的,但这些步骤在更早的版本中也适用,版本间变化指出均有记载。本文也会讨论其他的编译器。

    为修正这个问题,直接把 {Zemax}DLLSurfaces下面的“usersurf.h”复制并粘贴到source code同一个路径下,然后右键点击“Header Files”来载入头文件并导入现有的代码中。


    当头文件载入到正确的路径后,红色下划线应该就不再出现了。如果有任何内容未被读出,那么该DLL可能不能编译。即使编译了,也未必能正常运行。

    使用C++编译器

    绝大部分Zemax自带的案例文件都是用C语言写的。由于Visual Studio是个C++编译器,这意味着必须对代码进行一些修改来正确地编译它们。

    如果还没添加。那么在代码开头的初始化功能区放入“extern “C” {}”。同时确保把“BOOL WINAPI DllMain”这一行注释掉。


    在C++编译器里,程序(function)名往往会在后台被修改,以使得每个程序都有其唯一的标识。如果程序名变化了,那么OpticStudio会无法运行该DLL,因为OpticStudio会寻找具体的名称(例如:UserDefinedSurface、UserObjectDefinition等)采用上述改变可以强制编译器保持原来C代码里的程序名且忽略任何可能造成的错误。

    同样地,可能也会需要无视由于C和C++的细微不同造成的警告,例如:

    C4996: ‘srtcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

    如果这是编译中唯一遇到的警告,那么以下的代码可以绕过这个问题:

    #pragma warning ( disable : 4996 )


    这行代码会允许编译器提供特定于电脑或者操作系统的功能,同时保持C和C++语言上大体的兼容性。

    Rebuild Solution

    选择Build…Rebuild Solution来编译你的代码,或者直接按键盘“Ctrl+F5”。编译成功后会输出以下内容:


    分享到:
    扫一扫,关注光行天下的微信订阅号!
    【温馨提示】本频道长期接受投稿,内容可以是:
    1.行业新闻、市场分析。 2.新品新技术(最新研发出来的产品技术介绍,包括产品性能参数、作用、应用领域及图片); 3.解决方案/专业论文(针对问题及需求,提出一个解决问题的执行方案); 4.技术文章、白皮书,光学软件运用技术(光电行业内技术文档);
    如果想要将你的内容出现在这里,欢迎联系我们,投稿邮箱:service@opticsky.cn
    文章点评

    小小白啊:学习了(2020-09-01)

    顾鹏翔:学习了(2020-06-12)

    rige:学习了。。。。。(2020-05-30)

    jialunzhang:我在生成时遇见“无法启动.dll”文件的情况,请问这是为什么呢(2020-05-30)

    xiebin525:学习了,谢谢(2020-05-25)