### **前言** > 考虑到使用E语言设计程序界面比较简单与方便,同时又有一些比较完善的 DirectUI 引擎的支持,故在一些实际的小项目中可以考虑用C/C++写核心,E写界面,两者取长补短,提高开发效率。本文分享如何在VS2017中用使用C++编写DLL文件并在E中进行调用。 ![使用E做的界面](/upload/C-DLL-E-1.jpg) (在E中借助自绘引擎做的界面) ### **一、编写DLL** **1.** 打开VS2017,文件->新建->项目-Visual C++->空项目,这里命名为demo。 **2.** 在 资源管理器->源文件 中新建一个名为 demo.cpp 的 C++ 源文件: ``` #include "demo.h" #include using namespace std; //返回整形的函数 int testInt() { return 10; } //返回字符串的函数 char *testString() { static char sample[100] = { 0 }; strcpy_s(sample, "demo"); return sample; } //有参数的函数 int add(int a, int b) { return a + b; } ``` **3.** 在 资源管理器->源文件 中新建一个 demo.def 文件: ``` LIBRARY demo EXPORTS testInt add testString ``` **4.** 在 资源管理器->头文件 中新建一个 demo.h 头文件: ``` #pragma once extern "C" __declspec(dllexport) int testInt(); extern "C" __declspec(dllexport) int add(int a, int b); extern "C" __declspec(dllexport) char * testString(); ``` **5.** 为了得到尽可能小的体积,在 Release 模式下调试项目,报错显示不是有效的 Win32 应用程序,不用管,找到工程目录下 Release 文件夹中生成的 demo.exe,修改其后缀为 .dll 得到 DLL 文件。 ### **二、调用DLL** **1.** 新建E程序,添加外部DLL引用: ![E中添加外部DLL引用](/upload/C-DLL-E-2.jpg) **2.** 这里注意,因为C++与E默认的约定模式不同,如果命令有参数的话,“在库中对应命令名”一栏前面要加上一个@符号,否则会出现堆栈错误。 ![调用有参数的命令没有加@导致的堆栈错误](/upload/C-DLL-E-3.jpg) **3.** 调用相关代码,此处添加在窗口创建完毕的事件子程序中: ``` .版本 2 信息框 (到文本 (testInt ()) + #换行符 + testString () + #换行符 + 到文本 (add (100, 200)), 0, , ) 结束 () ``` **4.** 将 demo.dll 放在e程序的同级目录下,或者使用 置DLL装载目录 () 命令将下一次默认调用目录转到dll文件所在目录,随后 F5 调试程序。运行结果如下图: ![运行结果](/upload/C-DLL-E-4.jpg)
--- END ---