问题说明:
1.项目的工作区中有一个工程 MMI (很大有20W行左右的代码)它会生成一个mmi.lib库文件。
2.另外一个工程mskernel 会生成mskerne.dll文件,这个工程依赖 MMI 工程。而且一般保持固定。
我们是做二次开发的,要在MMI中加入一些自己需要的功能,于是,我在mmi_dict.c中做了如下的定义:
文件开始定义了需要的宏:
//define rect of word listox
#define MMIDICT_WORD_LISTBOX_LEFT 0
#define MMIDICT_WORD_LISTBOX_TOP 51
#define MMIDICT_WORD_LISTBOX_RIGHT 175
#define MMIDICT_WORD_LISTBOX_BOTTOM 199后面引用这些
WINDOW_TABLE( MMIDICT_INPUTWORD_WIN_TAB ) =
{
CLEAR_LCD,
CREATE_LISTBOX_CTRL(MMIDICT_WORD_LISTBOX_LEFT,
MMIDICT_WORD_LISTBOX_TOP,
MMIDICT_WORD_LISTBOX_RIGHT, MMIDICT_WORD_LISTBOX_BOTTOM,
......
END_WIN
};
说明:#define WINDOW_TABLE(_WINTAB_) const uint32 _WINTAB_[]在文件mmi_acc_main.c中使用了这个MMIDICT_INPUTWORD_WIN_TAB。
文件开始处:
#define WIN_DEF(_WINTAB_) extern const uint32 _WINTAB_[];
WIN_DEF(MMIDICT_INPUTWORD_WIN_TAB)后面引用了这个MMIDICT_INPUTWORD_WIN_TAB:
MMK_CreateWin((uint32 *)MMIDICT_INPUTWORD_WIN_TAB,PNULL);问题出来了:
大家知道VC的增量编译是很好用的,但是,只要我在mmi_dict.c编辑前面与宏定义有关的东西后,我“构建”MMI工程(应该是增量的)显示没有编译错误,但是我在生成依赖于该MMI工程的mskerne.dll时,在链接时却提示:
error LNK2001: unresolved external symbol _MMIDICT_INPUTWORD_WIN_TAB
./Bin/MSKernel.dll : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
然后,我有重新重建MMI工程(生成mmi.lib)后,生成mskerne.dll就没有问题了。
因为MMI重建需要很长时间(5-10分钟)所以,想问一下,为什么编辑了宏定义后,在链接时就找不到了这个_MMIDICT_INPUTWORD_WIN_TAB了。
1.项目的工作区中有一个工程 MMI (很大有20W行左右的代码)它会生成一个mmi.lib库文件。
2.另外一个工程mskernel 会生成mskerne.dll文件,这个工程依赖 MMI 工程。而且一般保持固定。
我们是做二次开发的,要在MMI中加入一些自己需要的功能,于是,我在mmi_dict.c中做了如下的定义:
文件开始定义了需要的宏:
//define rect of word listox
#define MMIDICT_WORD_LISTBOX_LEFT 0
#define MMIDICT_WORD_LISTBOX_TOP 51
#define MMIDICT_WORD_LISTBOX_RIGHT 175
#define MMIDICT_WORD_LISTBOX_BOTTOM 199后面引用这些
WINDOW_TABLE( MMIDICT_INPUTWORD_WIN_TAB ) =
{
CLEAR_LCD,
CREATE_LISTBOX_CTRL(MMIDICT_WORD_LISTBOX_LEFT,
MMIDICT_WORD_LISTBOX_TOP,
MMIDICT_WORD_LISTBOX_RIGHT, MMIDICT_WORD_LISTBOX_BOTTOM,
......
END_WIN
};
说明:#define WINDOW_TABLE(_WINTAB_) const uint32 _WINTAB_[]在文件mmi_acc_main.c中使用了这个MMIDICT_INPUTWORD_WIN_TAB。
文件开始处:
#define WIN_DEF(_WINTAB_) extern const uint32 _WINTAB_[];
WIN_DEF(MMIDICT_INPUTWORD_WIN_TAB)后面引用了这个MMIDICT_INPUTWORD_WIN_TAB:
MMK_CreateWin((uint32 *)MMIDICT_INPUTWORD_WIN_TAB,PNULL);问题出来了:
大家知道VC的增量编译是很好用的,但是,只要我在mmi_dict.c编辑前面与宏定义有关的东西后,我“构建”MMI工程(应该是增量的)显示没有编译错误,但是我在生成依赖于该MMI工程的mskerne.dll时,在链接时却提示:
error LNK2001: unresolved external symbol _MMIDICT_INPUTWORD_WIN_TAB
./Bin/MSKernel.dll : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
然后,我有重新重建MMI工程(生成mmi.lib)后,生成mskerne.dll就没有问题了。
因为MMI重建需要很长时间(5-10分钟)所以,想问一下,为什么编辑了宏定义后,在链接时就找不到了这个_MMIDICT_INPUTWORD_WIN_TAB了。
解决方案 »
- CCaptureVideo类捕捉rgb24可以怎么yuv就不行了???
- VC服务编程 自动启动??
- 请问,我做了一个窗体,背景是自绘图片显示的,之后在上边添加了静态文本控件,怎么才能去掉这个静态文本的背景呢
- 偶没有比BitBlt更快的复制位图的方法?
- 在WIN CE4.2中,知道位图的句柄,如何将其转换为DIB格式呀?
- 好像有个办法,能在vc程序出现未捕获异常后,记录异常位置,有谁知道?
- 数据链路层协议的开发问题
- 用vc++编写windows应用程序时是不是要把mfc的类库搞的很清楚啊?
- ===========遇到一个关于CScrollView的问题=================
- 怎样控制Windows资源管理器?
- 有统计一个工程里面所有文件的最后修改时间的方法么?谢谢
- 完成端口使用中遇到的问题
定义在哪的如果是在dll里面定义的,那么要把这个dll的相关的lib加进取,包含进你工程
#define MMIDICT_WORD_LISTBOX_BOTTOM 199后面引用这些
WINDOW_TABLE( MMIDICT_INPUTWORD_WIN_TAB ) = //就在这里呀
{
CLEAR_LCD,
------------------
lib库生成时 没有链接操作吗?是不是宏定义和引用宏的定义的变量在 该文件修改了以后会对整个工程的预编译产生影响呢?
然后:
WINDOW_TABLE( MMIDICT_INPUTWORD_WIN_TAB ) =
{
CLEAR_LCD,
CREATE_LISTBOX_CTRL(MMIDICT_WORD_LISTBOX_LEFT,
MMIDICT_WORD_LISTBOX_TOP,
MMIDICT_WORD_LISTBOX_RIGHT, MMIDICT_WORD_LISTBOX_BOTTOM,
......
END_WIN
};MMIDICT_INPUTWORD_WIN_TAB应该不算是宏吧?而是使用宏而已