未解析的外部SHCreateItemFromParsingName引用了VCL.LIB / Dialogs

时间:2010-12-09 22:45:18

标签: vcl

我有一个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组件外,任何人都有任何建议或之前看过这个吗?

1 个答案:

答案 0 :(得分:1)

好的,花了两天时间,我在这里发布后,我找到了解决方案。

在构建配置下(右键单击|编辑)

在“应用程序”下,有一个未选中的“启用运行时主题”复选框。

检查它,问题现在消失了。