把WINCE420下的显示驱动移植到WINCE600下。600之前的版本是把图形、窗口、事件子系统编译为GWES.exe,而到了600,却编译成GWES.dll,我编译是出现这样的错误:
BUILD: [01:0000002555:PROGC ] Linking C:\WINCE600\platform\XSBASE255\target\ARMV4I\retail\gwes.exe
BUILD: [01:0000002572:ERRORE] LINK : error LNK2001: unresolved external symbol WinMain
BUILD: [01:0000002573:ERRORE] C:\WINCE600\platform\XSBASE255\target\ARMV4I\retail\gwes.exe : fatal error LNK1120: 1 unresolved externals
BUILD: [01:0000002578:ERRORE] EDITBIN : fatal error LNK1104: cannot open file 'C:\WINCE600\platform\XSBASE255\target\ARMV4I\retail\gwes.exe'
这是说目标是生产.exe,而没有找到入口函数WinMain。那么这个问题应该怎样解决?怎么把它改成.dll?
从4.2移植,有一定的难度。因为从4.2到5.0时,驱动的框架发生了很大的变化,使移植有很大的难度。
再到6.0,显示驱动已经被放在内核态,不像5.0时显示驱动运行于用户态。
编译没有生成GWES.EXE,LZ还是先检查一下makefile和sources文件内容是否正确?6.0是需要将显示驱动编译为DLL,而不是EXE。
生产GWEX,不管是.EXE还是.DLL都是系统生产的吧?就是说源代码和SOURCES文件等都是MS提供的。如果在600中找有关GWES的源代码,在哪里?
在原来的BSP中有一个GWE的文件夹,里面的SOURCES文件就是要编译成GWES.EXE的,并且指定了入口地址。
那我把它改成:
TARGETTYPE=DYNLINK
然而没有.def文件,那么600中GWES的.def文件要导出哪些函数呢?
这是原来的SOURCES文件的内容:
RELEASETYPE=PLATFORM
EXEENTRY=WinMain
SYNCHRONIZE_DRAIN=1
TARGETNAME=gwes
TARGETTYPE=PROGRAM
TARGETLIBS=$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\gwes.lib \
!IF $(_WINCEOSVER) >= 400
!if exist($(_COMMONOAKROOT)\target\$(_CPUINDPATH)\0409\gwes.res)
$(_COMMONOAKROOT)\target\$(_CPUINDPATH)\0409\gwes.res \
!endif
!ELSE
!if exist($(_COMMONOAKROOT)\target\$(_CPUINDPATH)\usa\gwes.res)
$(_COMMONOAKROOT)\target\$(_CPUINDPATH)\usa\gwes.res \
!endif
!ENDIF
$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\nleddrv.lib \
$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\gwestubs.lib \
$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
$(_TARGETPLATROOT)\lib\$(_CPUINDPATH)\drvlib.lib
SOURCES=
TARGETFILES=dummy