我有一个C ++ Builder应用程序,我在Windows XP上从C ++ Builder 6移植到XE。
许多第三方控件也在使用中。
我正在使用Dynamic RTL = False进行编译
如果我在没有运行时包的情况下编译,我会收到主题错误消息:
[ILINK32错误]错误:未解析的外部'SHCreateItemFromParsingName'从C:\ PROGRAM FILES \ EMBARCADERO \ RAD STUDIO \ 8.0 \ LIB \ WIN32 \ RELEASE \ VCL.LIB |对话框中引用
如果我使用运行时软件包进行编译,则错误就会消失。
谷歌搜索显示SHCreateItemFromParsingName与可以使用WinAPI调用调用的公共控件对话框有关。
我使用的所有第三方控件都在一个新的/单独的项目中工作;因此这个问题似乎确实是一个简单的#define或其他......(不确定)
我在项目源中找不到会导致这种情况的任何内容。我的项目中有一个TOpenDialog和一个TSaveDialog,它替换了CBuilder6中使用的相同名称的旧TMC组件(TntOpenDialog,TntSaveDialog),以便为它提供Unicode支持。转换为VCL附带的那些并未解决此问题。
有一个Embarcadero线程,但这个人似乎通过创建#define来构建他们的WinXP应用程序和新的兼容性。在XE下,我将C ++编译器选项设置为目标Windows XP和更新版本,但也不起作用。
尝试添加:
“#define WINVER 0x0502”
“#define _WIN32_WINNT 0x0502”
每个MSDN链接: http://msdn.microsoft.com/en-us/library/aa383745%28v=vs.85%29.aspx
无济于事。
除Open / SaveDialog组件外,任何人都有任何建议或之前看过这个吗?
答案 0 :(得分:1)
好的,花了两天时间,我在这里发布后,我找到了解决方案。
在构建配置下(右键单击|编辑)
在“应用程序”下,有一个未选中的“启用运行时主题”复选框。
检查它,问题现在消失了。