1、可以用Visual Studio C++ 6.0或者.net来开发,具体使用可以参考brew文档,特别是.net的需要多一些步骤来设置工程的属性。
2、必须要有bid文件,放在和dll同一目录下, bid文件中包含的是brew应用程序的classid, 可以使用mif编辑器来生成
3、mif文件名要和工程文件名一致,而且要跟工程文件所在的目录放在同一级
4、资源编辑器会自动生成<文件名>.bar和<文件名>_res.h两个文件,并要放在和dll同一目录下。在程序中需要将_res.h包含进去
5、在_res.h头文件中除了定义的字符串、控件等资源外,还自动定义一个字串表示该资源文件名称。如:#define BREWMENU1_RES_FILE "brewmenu1.bar"
6、projectname.c中包含AEEAppGen.h和AEEModGen.h,另外根据具体应用中用到的接口加入相应的头文件,如用菜单的话加入AEEMenu.h等。
7、HandleEvent事件可以自行定义如:Mymenu_HandleEvent,要作为初始函数AEEClsCreateInstance中调用AEEApplet_New的参数传入,这样应用程序启动后就能进入该事件作为消息循环处理。
8、boolean AEEApplet_New(int16 nSize,
AEECLSID clsID,
IShell * pIShell,
IModule * pIModule,
IApplet **ppobj,
AEEHANDLER pAppHandleEvent,
PFNFREEAPPDATA pFreeAppData)
函数的ppobj是返回参数, *ppobj指向有效的AEEApplet结构
在实际开发中,一般自定义一个结构体,其中第一项必须是AEEApplet类型的变量,后边的变量可以将可能用的接口都封装起来,然后将该自定义结构体用于程序中。
例子:
定义结构体
typedef struct _CHelloBrewApp
{
AEEApplet a; // 强制写到第一项,这是必须的,因为AEEApplet_New函数返回的*ppobj是指向一个AEEApplet的一个指针,所以AEEApplet类型必须放在结构体首位。
AEERect m_rScreenRect; // Screen Rectangle
IMenuCtl * m_pMenu; // Main Menu
IMenuCtl * m_pList; // List Menu
AEECallback m_rSaveReportCB; // Callback
AEECallback cbkLookup;
AEEDNSResult dnsresult;
} CHelloBrewApp;
在初始化中使用
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * pMod,void ** ppObj)
{
CHelloBrewApp * pApp=NULL;
if(AEEApplet_New( sizeof(CHelloBrewApp), // 注意这里是结构体的大小
ClsId, // Our class ID
pIShell, // Shell interface
pMod, // Module instance
(IApplet**)ppObj, // 返回指向AEEApplet的指针
(AEEHANDLER)BrewMenu_HandleEvent, // 自定义的事件处理函数
NULL)) // 没有释放函数
return(AEE_SUCCESS);
pApp = ( CHelloBrewApp*) *ppObj; //强制转换并赋予CHelloBrewApp实例
return (EFAILED);
}
9、error C2082: 形参“AEEClsCreateInstance”的重定义 ,这种错误一般是由于前边的函数声明部分有的没有用分号结束。
10、EVT_COMMAND是从各种控件发出的命令处理,如选择某个菜单项IDC_ADD_VIEW,那么EVT_COMMAND可能就是IDC_ADD_VIEW