VC调用易语言写的DLL例子 100
.版本2.DLL命令fdx,整数型,"fdx.exe","注册".参数邮箱,文本型.参数密码,文本型这是我易语言调用的例子请问VC怎么调用?给个例子好吗?...
.版本 2
.DLL命令 fdx, 整数型, "fdx.exe", "注册"
.参数 邮箱, 文本型
.参数 密码, 文本型
这是我易语言调用的例子
请问VC怎么调用? 给个例子好吗? 展开
.DLL命令 fdx, 整数型, "fdx.exe", "注册"
.参数 邮箱, 文本型
.参数 密码, 文本型
这是我易语言调用的例子
请问VC怎么调用? 给个例子好吗? 展开
1个回答
展开全部
今天尝试用VC++调用易语言的DLL。易语言有很多不错的高级函数库,且编写DLL过程非常简单,一切C++下复杂的功能,可以在易语言里简单的实现,所以我们考虑通过易语言制作DLL给VC++调用。
易语言的DLL函数都是stdcall约定,而且不会生成lib文件给你调用。
这样,要调用我们易dll有两种途径:
1. VC中动态调用_stdcall。
2. 自己制作一份lib文件再静态调用。
这两种方法各有利弊,如果DLL里的函数较多,制作lib库会花些时间,但是一劳永逸。
动态调用DLL则需要调用API函数LoadLibrary 和 GetProcAddress。LoadLibrary载入需要调用的DLL文件,然后用GetProcAddress 得到DLL中某个函数的指针,然后通过函数指针调用。
下面我们举例说明,如何制作易语言DLL并在VC中动态调用。
1. 首先,制作一个易语言的DLL。
打开易语言,弹出向导中选择"windows动态链接库"。
现在我们添加自己的函数了。Ctrl+N添加一个函数如下
.版本 2
.子程序 myadd, 双精度小数型, 公开
.参数 a, 双精度小数型
.参数 b, 双精度小数型
返回 (a + b)
myadd函数用来计算两个双精度小数(即C++的double类型)的和。
不要忘记函数要公开,这样才能export此函数。
完成后,编译成dll文件,命名为mydll.dll
这样,一个简单的易语言DLL就制作完成了。
2. 在VC中调用易语言的DLL
要动态调用DLL,需要使用API函数LoadLibrary 和 GetProcAddress。查下MSDN就知道,使用这两个函数需要加入
#include <Windows.h>
接下来,我们需要对调用的函数声明一个_stdcall的函数类型。
typedef double(CALLBACK *dll_myadd)(double,double);
(注意: CALLBACK和WINAPI都是__stdcall的一种别名,这个在windef.h中有定义:
#define CALLBACK __stdcall //回调函数用
#define WINAPI __stdcall //WINAPI用
用哪个随便,你也可以直接写__stdcall. )
有了函数类型,你就可以用他来定义函数指针变量,进而调用函数了。
HINSTANCE hDll; //dll句柄
dll_myadd myadd; //函数指针变量
hDll=LoadLibrary("mydll.dll"); //载入dll
myadd=(dll_myadd)GetProcAddress(hDll,"myadd"); //得到dll中myadd函数的指针地址
double s = myadd(1.2,2.3); //这里调用函数
不要忘记,在DLL使用完毕后要调用
FreeLibrary(hDll); //释放DLL句柄
这样调用易语言DLL的简单例子就完成了。需要注意的是:
声明函数类型的时候,一定要指定是stdcall调用,这点不能省略。因为VC默认的调用方式是cdecl方式。
如果想省略的话也可以,那就是要改变项目属性,在属性页 - C++选项卡 - 高级 - 调用约定 里 选择使用stdcall。这样也可以省略stdcall声明。
易语言的DLL函数都是stdcall约定,而且不会生成lib文件给你调用。
这样,要调用我们易dll有两种途径:
1. VC中动态调用_stdcall。
2. 自己制作一份lib文件再静态调用。
这两种方法各有利弊,如果DLL里的函数较多,制作lib库会花些时间,但是一劳永逸。
动态调用DLL则需要调用API函数LoadLibrary 和 GetProcAddress。LoadLibrary载入需要调用的DLL文件,然后用GetProcAddress 得到DLL中某个函数的指针,然后通过函数指针调用。
下面我们举例说明,如何制作易语言DLL并在VC中动态调用。
1. 首先,制作一个易语言的DLL。
打开易语言,弹出向导中选择"windows动态链接库"。
现在我们添加自己的函数了。Ctrl+N添加一个函数如下
.版本 2
.子程序 myadd, 双精度小数型, 公开
.参数 a, 双精度小数型
.参数 b, 双精度小数型
返回 (a + b)
myadd函数用来计算两个双精度小数(即C++的double类型)的和。
不要忘记函数要公开,这样才能export此函数。
完成后,编译成dll文件,命名为mydll.dll
这样,一个简单的易语言DLL就制作完成了。
2. 在VC中调用易语言的DLL
要动态调用DLL,需要使用API函数LoadLibrary 和 GetProcAddress。查下MSDN就知道,使用这两个函数需要加入
#include <Windows.h>
接下来,我们需要对调用的函数声明一个_stdcall的函数类型。
typedef double(CALLBACK *dll_myadd)(double,double);
(注意: CALLBACK和WINAPI都是__stdcall的一种别名,这个在windef.h中有定义:
#define CALLBACK __stdcall //回调函数用
#define WINAPI __stdcall //WINAPI用
用哪个随便,你也可以直接写__stdcall. )
有了函数类型,你就可以用他来定义函数指针变量,进而调用函数了。
HINSTANCE hDll; //dll句柄
dll_myadd myadd; //函数指针变量
hDll=LoadLibrary("mydll.dll"); //载入dll
myadd=(dll_myadd)GetProcAddress(hDll,"myadd"); //得到dll中myadd函数的指针地址
double s = myadd(1.2,2.3); //这里调用函数
不要忘记,在DLL使用完毕后要调用
FreeLibrary(hDll); //释放DLL句柄
这样调用易语言DLL的简单例子就完成了。需要注意的是:
声明函数类型的时候,一定要指定是stdcall调用,这点不能省略。因为VC默认的调用方式是cdecl方式。
如果想省略的话也可以,那就是要改变项目属性,在属性页 - C++选项卡 - 高级 - 调用约定 里 选择使用stdcall。这样也可以省略stdcall声明。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询