5261|17

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE上,lib 变为 dll. [复制链接]

D:\WINCE600\PUBLIC\DIRECTX\SDK\SAMPLES\DSHOW\FILTERS\BALL,
build -c 编译出来是ball.lib.
想要编译出来是ball.dll, 其它程序好调用.


现改D:\WINCE600\PUBLIC\DIRECTX\SDK\SAMPLES\DSHOW\FILTERS\BALL\sources 文件,
  TARGETTYPE=LIBRARY --> TARGETTYPE=DYNLINK

仅仅这样改,不能正确编译, 出错信息如下:

BUILD: [Thrd:Sequence:Type  ] Message
BUILD: [01:0000000071:ERRORE] ball.def : error LNK2001: unresolved external symbol DllCanUnloadNow
BUILD: [01:0000000072:ERRORE] ball.def : error LNK2001: unresolved external symbol DllGetClassObject
BUILD: [01:0000000073:ERRORE] D:\WINCE600\public\directx\oak\lib\ARMV4I\retail\ball.lib : fatal error LNK1120: 2 unresolved externals


还要改什么地方, 才能编译出来是ball.dll?
此帖出自WindowsCE论坛

最新回复

如果LZ仅仅想将其生成DLL来用的话,可以将其移到BSP里面来,改成DLL的生成方式,再将联接的库的路径等,联接到public相应的地方。。。 再者,你也可以查看一下对应的TARGET目录下是不是也生成了DLL,有的模块会在这里生成的,即:会同时生成lib和dll。。。 还有一些模块,你在这个模块的sources文件里面看到的是生成lib,但是最后是否生成dll,你可以查看makefile文件。。。里面规定好的  详情 回复 发表于 2009-12-26 09:51
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
UP
此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
其实这个要在你的source里面去定
举两个例子

TARGETNAME=xxxx_lib
RELEASETYPE=PLATFORM
TARGETTYPE=LIBRARY
这个就是出lib的。注意TARGETTYPE


TARGETNAME=xxxx
RELEASETYPE=PLATFORM
TARGETTYPE=DYNLINK
这个是出dll的。注意TARGETTYPE
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
转一个文章过了。。。blogspot被和谐了。。只能这样转了。。。lz看看应该有帮助。

[WinCE] SOURCES文件詳解
SOURCES文件是WINCE底层开发中最重要的文件之一,主要的配置项如下:

TARGETNAME,定义模块名称.
TARGETTYPE,模块的种类,可以是DYNLINK, LIBRARY,EXE.
如果TARGETTYPE是DLL,则可以定义DLLENTRY,将Dll入口定义成别的不是DLLMain的函数,如果DLL的入口是DllMain,则不需要别的定义。
如果TARGETTYPE是EXE,则可以定义EXEENTRY,用于指定EXE的入口函数.

如果TARGETTYPE是LIBRARY,则不需要定义入口函数。


INCLUDES,如果一个模块需要使用非标准路径下的头文件时,需要定义INCLUDES,用于包含更多的头文件路径,用法如下:

INCLUDES=$(INCLUDES);\new directory\...,注意定义新的INCLUDES时,需要包含INCLUDES原来的值,否则就需要包含所有可能的目录。

TARGETLIBS,SOURCELIBS用于定义该模块需要链接哪些库文件.


TARGETLIBS,如果一个库以DLL的形式提供给调用者,就需要用TARGETLIBS,它只链接一个函数地址,系统执行时会将被链接的库加载。比如coredll.lib就是这样的库文件。即动态链接。

SOURCELIBS,将库中的函数实体链接进来。即静态链接,用到的函数会在我们的文件中形成一份拷贝。


注意,内核这个执行文件是没有TARGETLIBS的,GIISR.DLL也不能有TARGETLIBS。


WINCECOD,如果将其定义为1,则编译器会为每一个文件生成.cod文件,它是一个汇编文件,调试时查看汇编代码也是一种很好的办法。

SOURCES,定义该模块需要哪些源文件.
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
光改TARGETTYPE,是不行的

要连接的库没有指明,所以会出这样的问题

改PUBLIC下的东西,最好移到bsp下改,在源文件上改会影响到别的bsp


如果只是想生成dll,到PUBLIC\COMMON\CESYSGEN\用 nmake *(要生成的文件名,LZ这个是ball)
此帖出自WindowsCE论坛
 
 
 

回复

293

帖子

0

TA的资源

纯净的硅(高级)

6
 
SOURCES文件   
SYNCHRONIZE_DRAIN=1

RELEASETYPE=PLATFORM

TARGETNAME=battdrvr
TARGETTYPE=DYNLINK
DEFFILE=battdrvr.def
DLLENTRY=DllMain
TARGETLIBS= \
  $(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
  $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \

SOURCELIBS= \
  $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\battdrvr_lib.lib \
  
INCLUDES=\
        $(_PUBLICROOT)\common\oak\inc;$(_PUBLICROOT)\common\sdk\inc;$(_PUBLICROOT)\common\ddk\inc;        \
         ..\..\inc

SOURCES= \
  battif.c \


!IF "$(BSP_NOBATTERY)" == "1"
SKIPBUILD=1
!ENDIF
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 4 楼 suwyhoho 的回复:
光改TARGETTYPE,是不行的

要连接的库没有指明,所以会出这样的问题

改PUBLIC下的东西,最好移到bsp下改,在源文件上改会影响到别的bsp


如果只是想生成dll,到PUBLIC\COMMON\CESYSGEN\用 nmake *(要生成的文件名,LZ这个是ball)

mark下。不过感觉没这么复杂吧。牵涉到public了就比较头痛了。
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
可能还需要另外一些库才能生成dll
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
我试了许多次,都不行(可能方法不对,理解也不对). 也不可能(也不允许)花太多时间。

谁能搞出来(ball.lib-->ball.dll),给100分.
此帖出自WindowsCE论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

10
 
你看看你的BSP包里有没有lib这个文件夹?可能你的lib生成放在那里了。。。你自己却不知道。。。
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
lib-》arm4i-》retail下面。。。
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
晕看错了。。。。。你在生成public里面的lib???上面说错了。。。。这个没接触过。。
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

13
 
有D:\WINCE600\PUBLIC\DIRECTX\SDK\SAMPLES\DSHOW\FILTERS\BALL\*.cpp,

生成的ball.lib 在
D:\WINCE600\PUBLIC\DIRECTX\OAK\LIB\ARMV4I\RETAIL

想要它生成ball.dll.  因为有的程序(DShow注册时)只认.dll.

ball.lib  --->  ball.dll (如何转)
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

14
 
hr = CoCreateInstance(CLSID_BouncingBall, NULL,
                  CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **) &pBF_OvM);
hr = pGB->AddFilter(pBF_OvM, L"Bouncing Ball");

hr->提示, "没有注册类别", 不能正常运行。

如何解决此类问题?


Filter如果注册了,注册表中应该有相应的记录,是吗?

Filter注册项存在注册表中什么位置?
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

15
 
你想把lib搞成dll,光修改source不行吧,你有dll入口函数吗??具体我不知道?如果有了source改了应该是可以,还有我看你是pubilc下的lib,不知道你怎么操作的,你不会像在pubilc下直接生成dll吧?这样不好建议拿到platform下生成!
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 14 楼 xuefeng_baggio 的回复:
你想把lib搞成dll,光修改source不行吧,你有dll入口函数吗??具体我不知道?如果有了source改了应该是可以,还有我看你是pubilc下的lib,不知道你怎么操作的,你不会像在pubilc下直接生成dll吧?这样不好建议拿到platform下生成!

可以试试自己做一个驱动。代码参考public的。。LS这个建议不错。可以尝试
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

17
 
把代码搬到VS编译,虽然麻烦点,但方便调试和修改
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

18
 
如果LZ仅仅想将其生成DLL来用的话,可以将其移到BSP里面来,改成DLL的生成方式,再将联接的库的路径等,联接到public相应的地方。。。

再者,你也可以查看一下对应的TARGET目录下是不是也生成了DLL,有的模块会在这里生成的,即:会同时生成lib和dll。。。

还有一些模块,你在这个模块的sources文件里面看到的是生成lib,但是最后是否生成dll,你可以查看makefile文件。。。里面规定好的
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表