CB2007编译UNICODE程序如何链接到C0W32W.obj???

mopyman 2008-06-28 08:52:00
编译一个不使用VCL的UNICODE程序,主程序入口是_tWinMain,在release_builds里面加上_UNICODE和UNICODE宏,编译时提示:
[ILINK32 Error] Error: Unresolved external 'WinMain' referenced from D:\PROGRAM FILES\CODEGEAR\RAD STUDIO\5.0\LIB\C0W32.OBJ
是的,我明白,定义了_UNICODE和UNICODE宏后,主程序入口为wWinMain,而C0W32.OBJ需要ansi版的程序入口,所以出现这个提示,UNICODE程序需要链接到C0W32W.OBJ。但是找了半天也找不到如何设置CB2007才能使程序链接到C0W32W.OBJ,在linker的Additional options里面加入C0W32W也不可以。
请教了!!!
...全文
317 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
wontor1 2009-05-21
  • 打赏
  • 举报
回复
WINAPI WinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
改为
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)

并添加头文件
#include <tchar.h>
mopyman 2008-06-30
  • 打赏
  • 举报
回复
CCRUN.COM上wskjuf的回答:
--------------------------------------------------------------
codegear似乎忘记在菜单的设置选项里添加入口main函数的可视化设置支持了,解决的方法有。

1、命令行编译:


C:\test>bcc32 -3 -P -c -WC -WU file1.cpp

C:\test>ilink32 -aa -c -Tpe c0x32w.obj file1.obj,file1.exe,,import32.lib cw32mti.lib,,


这里-WU和c0x32w提供了对console方式下unicode的支持。

2、菜单方式:
unicode和_unicode的声明并不影响入口main函数的形式,它只影响如MessageBox这些函数,如果它们被声明,就编译连接到W结尾的函数。影响main函数形式的设置在主工程文件里。

bcb6:菜单Project-Edit Option Source,弹出project1.bpr.xml,改<ALLOBJ value="c0x32.obj $(PACKAGES) $(OBJFILES)"/>这行就可以了。当然有时会改不成功,那只有关闭工程直接去改文件。

2007:暂时没发现从菜单上就可以改的,但可以修改project1.cbproj:
<PropertyGroup Condition="'$(Base)'!=''">
<BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed>
<OutputExt>exe</OutputExt>
<DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput>
<Defines>NO_STRICT</Defines>
<DynamicRTL>true</DynamicRTL>
<ILINK_ObjectSearchPath>test3</ILINK_ObjectSearchPath>
<ProjectType>CppConsoleApplication</ProjectType>
<ILINK_StartupObjs>c0x32w.obj</ILINK_StartupObjs>


插入最后那一行。之所以这么做,是因为2007采用了msbuild,有兴趣的自己看一看target文件。以前在论坛里已介绍了这部分的内容,现在就不废话了。

改完之后,编译仍然会出现错误的提示,那是因为还没有设置-WU的缘故。有兴趣的看能不能解决吧。

3、bcc32,ilink32还支持配置文件,事先写好后可以比1的方式更快的完成编译,诸如此类的方法,看得人眼花缭乱,各位选一种最适合自己的来使用就可以了。


c0d32.obj DLL startup module

c0d32w.obj DLL startup module Wide-char version

c0d32x.obj DLL startup module no exception handling

c0pkg32.obj Package startup module

c0s32.obj 不明

c0w32.obj GUI EXE startup module

c0w32w.obj GUI EXE startup module Wide-char version

c0x32.obj 32-bit console-mode EXE startup module

c0x32w.obj 32-bit console-mode EXE startup module Wide-char version
-------------------------------------------------------------------------
看来真是个挺让人郁闷的问题!
laowang2 2008-06-30
  • 打赏
  • 举报
回复
关注中。。。。。。。。。。
mopyman 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 fayfarn 的回复:]
用文本编辑器直接打开工程文件来修改
[/Quote]
C++Builder 2007应该修改工程文件的什么地方?我一直在找,没找到
fayfarn 2008-06-30
  • 打赏
  • 举报
回复
用文本编辑器直接打开工程文件来修改
  • 打赏
  • 举报
回复
等2008
mopyman 2008-06-30
  • 打赏
  • 举报
回复
插入<ILINK_StartupObjs>c0x32w.obj </ILINK_StartupObjs> 这个语句后,居然可以编译通过了,谢天谢地。
僵哥 2008-06-29
  • 打赏
  • 举报
回复
ftp://H2Field:R4D2007@bekins1.borland.com/RADStudio2007Patch23.exe
僵哥 2008-06-29
  • 打赏
  • 举报
回复
好象是我搞错了,这上更新当中没有dcc100.dll,你可以看看bcbide100.bpl (pactch23 v11.0.2987.10779)
僵哥 2008-06-29
  • 打赏
  • 举报
回复
那就奇怪了,我新建任何一个工程没可以编译,里面写的比如MessageBox,也是对应的MessageBoxW
僵哥 2008-06-29
  • 打赏
  • 举报
回复
不知道楼主是在哪里定义的UNICODE?建议在Project->Options...->Path and Defines->Coditional Defines加上";_UNICODE;UNICODE"(不包括双引号)
mopyman 2008-06-29
  • 打赏
  • 举报
回复
已打patch23,dcc100.dll版本11.0.2963.11001,CB2007版本:11.0.2987.10779
重新新建工程,问题依旧
记得Turbo C++ 2006可以的。
僵哥 2008-06-29
  • 打赏
  • 举报
回复
Patch23是最新补丁,主要还是看编译器的版本,dcc100.dll 11.0.2963.11001(patch23)
mopyman 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 unsigned 的回复:]
那你可能得更新一下,我这里打了Patch23,是可以的。
[/Quote]
我的版本号是:11.0.2902.10471版本不够新吗?Patch23是新补丁吗?
jacknes009 2008-06-29
  • 打赏
  • 举报
回复
等待着好的版本~~

~~~~
僵哥 2008-06-29
  • 打赏
  • 举报
回复
那你可能得更新一下,我这里打了Patch23,是可以的。
mopyman 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 unsigned 的回复:]
不知道楼主是在哪里定义的UNICODE?建议在Project->Options...->Path and Defines->Coditional Defines加上";_UNICODE;UNICODE"(不包括双引号)
[/Quote]
就是在这里加的!不行!估计还有其他地方需要设置!
mopyman 2008-06-29
  • 打赏
  • 举报
回复
记得Turbo C++ 2006修改bpr文件可以解决这个问题
我来看看CB 2008-06-29
  • 打赏
  • 举报
回复
等2008吧
僵哥 2008-06-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 mopyman 的回复:]
可能IDE真的无法设置,我想到一个丑陋的办法,就是把D:\PROGRAM FILES\CODEGEAR\RAD STUDIO\5.0\LIB\C0W32W.OBJ的名字改为C0W32.OBJ,骗过IDE,编译通过,结果正确,真郁闷!!!
[/Quote]
这个确实是一个问题,即使我通过加上" -WU",它还是提示我错误,根据就无法覆盖掉。
加载更多回复(7)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧