前言

考虑到使用E语言设计程序界面比较简单与方便,同时又有一些比较完善的 DirectUI 引擎的支持,故在一些实际的小项目中可以考虑用C/C++写核心,E写界面,两者取长补短,提高开发效率。本文分享如何在VS2017中用使用C++编写DLL文件并在E中进行调用。

使用E做的界面 (在E中借助自绘引擎做的界面)

一、编写DLL

1. 打开VS2017,文件->新建->项目-Visual C++->空项目,这里命名为demo。

2. 在 资源管理器->源文件 中新建一个名为 demo.cpp 的 C++ 源文件:

#include "demo.h"
#include<string.h>
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引用

2. 这里注意,因为C++与E默认的约定模式不同,如果命令有参数的话,“在库中对应命令名”一栏前面要加上一个@符号,否则会出现堆栈错误。

调用有参数的命令没有加@导致的堆栈错误

3. 调用相关代码,此处添加在窗口创建完毕的事件子程序中:

.版本 2

信息框 (到文本 (testInt ()) + #换行符 + testString () + #换行符 + 到文本 (add (100, 200)), 0, , )
结束 ()

4. 将 demo.dll 放在e程序的同级目录下,或者使用 置DLL装载目录 () 命令将下一次默认调用目录转到dll文件所在目录,随后 F5 调试程序。运行结果如下图:

运行结果

--- END ---