在Win32SDK中使用Lu模块化编译运行库MLu.docx
- 文档编号:2298259
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:30
- 大小:1.53MB
在Win32SDK中使用Lu模块化编译运行库MLu.docx
《在Win32SDK中使用Lu模块化编译运行库MLu.docx》由会员分享,可在线阅读,更多相关《在Win32SDK中使用Lu模块化编译运行库MLu.docx(30页珍藏版)》请在冰豆网上搜索。
在Win32SDK中使用Lu模块化编译运行库MLu
在Win32SDK中使用Lu模块化编译运行库MLu
(WindowsXP系统,使用VC2008演示)
(欢迎访问:
)
1、启动VS2008(VC++2008),点击红色圈出部分创建项目。
2、创建Win32项目,名称为TestMLu,点击“确定”。
3、点击“下一步”。
4、选择“空项目”,点击“完成”。
5、工程生成后如下图所示。
6、在进行下一步之前,先来看看我们要设计的主程序界面,我们将先实现这个界面。
7、实现主程序界面的代码:
这些代码没有使用Lu,仅仅实现主程序界面
头文件:
TestMLu.h(文件创建方法:
先创建一个文本文件,输入以下内容并保存,然后更改文件名为TestMLu.h)
#defineIDM_cal_com10
#defineIDM_cal_cal11
#defineIDM_cal_comcal12
#defineIDE_EditCode30
#defineIDE_EditOut31
(注意:
复制到文件中后,最后一条语句后面,请加一个回车,否则容易出现编译错误。
下同。
)
资源文件:
TestMLu.rc(文件创建方法:
先创建一个文本文件,输入以下内容并保存,然后更改文件名为TestMLu.rc)
#include"windows.h"
#include"TestMLu.h"
//Menu
mainMenuMENUDISCARDABLE
{
POPUP"计算(&J)"
{
MENUITEM"计算(&J)",IDM_cal_comcal
MENUITEMSEPARATOR
MENUITEM"编译(&B)",IDM_cal_com
MENUITEM"执行(&Z)",IDM_cal_cal
}
}
实现文件:
TestMLu.cpp(文件创建方法:
先创建一个文本文件,输入以下内容并保存,然后更改文件名为TestMLu.cpp)
#include"windows.h"
#include"TestMLu.h"
//////////////////////////////////////全局数据
HINSTANCEhInstance;//实例句柄
HWNDhwndEditCode,hwndEditOut;//代码窗口和输出窗口
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明
////////////////////////////////////////Windows应用程序入口
intWINAPIWinMain(HINSTANCEhhInstance,HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow)
{
HWNDhWnd;
MSGMsg;
WNDCLASSwndclass;
wchar_tlpszClassName[]=L"classTestMLu";//窗口类名
wchar_tlpszTitle[]=L"TestMLu";//窗口标题名
hInstance=hhInstance;//记住实例句柄
//窗口类的定义
wndclass.style=0;//窗口类型
wndclass.lpfnWndProc=WndProc;//窗口处理函数为WndProc
wndclass.cbClsExtra=0;//窗口类无扩展
wndclass.cbWndExtra=0;//窗口实例无扩展
wndclass.hInstance=hInstance;//当前实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为缺省图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口采用箭头光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景为白色
wndclass.lpszMenuName=L"mainMenu";//窗口菜单
wndclass.lpszClassName=lpszClassName;//窗口类名
//窗口类注册
if(!
RegisterClass(&wndclass))//如果注册失败则发出警告声音
{
MessageBeep(0);
MessageBox(GetFocus(),L"注册失败!
",L"TestMLu",MB_OK);
return0;
}
//创建窗口
hWnd=CreateWindow(lpszClassName,//窗口类名
lpszTitle,//窗口实例的标题名
WS_OVERLAPPEDWINDOW,//窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT,//窗口左上角坐标为缺省值
CW_USEDEFAULT,
CW_USEDEFAULT,//窗口的高和宽为缺省值
NULL,//此窗口无父窗口
NULL,//此窗口无主菜单
hInstance,//创建此窗口的应用程序的当前句柄
NULL);//不使用该值
//显示窗口
ShowWindow(hWnd,SW_SHOWNORMAL);
//绘制用户区
UpdateWindow(hWnd);
//消息循环
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
if(!
UnregisterClass(lpszClassName,hInstance))//AreWeAbleToUnregisterClass
{
MessageBox(NULL,L"CouldNotUnregisterClass.",L"TestMLu",MB_OK|MB_ICONINFORMATION);
}
returnMsg.wParam;//消息循环结束即程序终止时将信息返回系统
}
//窗口函数
LRESULTCALLBACKWndProc(HWNDhWnd,UINTMessage,WPARAMwParam,LPARAMlParam)
{
switch(Message)
{
caseWM_CREATE:
hwndEditCode=CreateWindow(L"EDIT",NULL,//创建代码编辑框;
WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|WS_BORDER|ES_LEFT|ES_MULTILINE|
ES_AUTOHSCROLL|ES_AUTOVSCROLL,
0,0,LOWORD(lParam),HIWORD(lParam/2),hWnd,(HMENU)IDE_EditCode,hInstance,NULL);
hwndEditOut=CreateWindow(L"EDIT",NULL,//创建输出编辑框;
WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|WS_BORDER|ES_LEFT|ES_MULTILINE|
ES_AUTOHSCROLL|ES_AUTOVSCROLL,
0,HIWORD(lParam/2+2),LOWORD(lParam),HIWORD(lParam/2-2),hWnd,(HMENU)IDE_EditOut,hInstance,NULL);
SetWindowText(hwndEditCode,L"//这里是代码窗口,请将Lu代码写在下面\r\n");
SetFocus(hwndEditCode);
break;
caseWM_SIZE:
MoveWindow(hwndEditCode,0,0,LOWORD(lParam),HIWORD(lParam/2),true);
MoveWindow(hwndEditOut,0,HIWORD(lParam/2+2),LOWORD(lParam),HIWORD(lParam/2),true);
UpdateWindow(hWnd);
break;
caseWM_COMMAND:
switch(LOWORD(wParam))
{
caseIDM_cal_com:
break;
caseIDM_cal_cal:
break;
caseIDM_cal_comcal:
break;
}
break;
caseWM_DESTROY:
PostQuitMessage(0);//调用PostQuitMessage发出WM_QUIT消息
break;
default:
//默认时采用系统消息默认处理函数
returnDefWindowProc(hWnd,Message,wParam,lParam);
}
return0;
}
8、将TestMLu.h、TestMLu.rc和TestMLu.cpp三个文件放到文件夹“D:
\lu\lu32\TestMLu\TestMLu”。
9、返回VC,点击下图中红色圈出部分“项目->添加现有项”。
10、添加TestMLu.h、TestMLu.rc和TestMLu.cpp三个文件到工程中。
11、新的工程如下图,点击下图中红色圈出部分“生成->生成解决方案”。
12、生成成功。
13、点击下图中红色圈出部分“调试->开始执行(不调试)”。
14、程序界面如下图所示,与我们设想一致。
15、在“TestMLu.cpp”中加入Lu脚本支持的代码,注意红色和青色部分是新加的。
/***********************************************************************
使用MLu的一般步骤:
(1)使用函数InitMLu进行初始化(必须)。
(2)使用函数LoadDll加载需要的Lu扩展库。
(3)使用函数ComModule将字符串源代码编译为模块(必须)。
(4)使用函数ExeModule执行模块,或者使用函数GetFor获取需要的表达式进行计算(必须)。
(5)使用函数SearchKey验证操作数据的类型,然后进行数据传送操作。
(本例未使用)
(6)使用函数FreeDll卸载Lu扩展库。
(7)使用函数FreeMLu释放资源(必须)。
***********************************************************************/
#include"windows.h"
#include"TestMLu.h"
//使用Lu脚本必须的头文件
#include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Win32SDK 使用 Lu 模块化 编译 运行 MLu