2010-12-09 46 views
1

我有一個C++ Builder應用程序,我正在從C++ Builder 6移植到Windows XP上的XE。無法解析的外部SHCreateItemFromParsingName引用VCL.LIB /對話框

許多第三方控件也在使用中。

我與動態RTL編譯=假

如果我沒有編譯運行時的包我得到的對象錯誤消息:

[ILINK32錯誤]錯誤:無法解析的外部「SHCreateItemFromParsingName」由C引用: \ PROGRAM FILES \ EMBARCADERO \ RAD STUDIO \ 8.0 \ LIB \ WIN32 \ RELEASE \ VCL.LIB |對話框

如果我用運行時包編譯錯誤消失。

Googling around顯示SHCreateItemFromParsingName必須處理可以用WinAPI調用調用的通用控件對話框。

所有第三方控件我使用在一個新的/單獨的項目中工作;因此這個問題似乎是一個簡單的#定義或東西....(不知道)

我找不到任何東西在我的項目源會導致此。我在我的項目中有一個TOpenDialog和一個TSaveDialog,取代了在CBuilder6中使用的相同名稱(TntOpenDialog,TntSaveDialog)的舊TMC組件,以便爲相同的名稱提供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組件之外,任何人都有任何建議或見過?

回答

2

好吧,花了兩天的時間,一旦我把它發佈在這裏,我找到了解決方案。

在構建配置(右鍵單擊|編輯)

在應用程序有一個複選框「啓用運行的主題」那是聽之任之。

檢查了它,現在問題消失了。

+0

這是一個繃帶,而不是真正的解決方案。 * real *解決方案是將BCB的`shell32.lib`添加到項目中以解析SHCreateItemFromParsingName引用。 – 2017-12-31 04:01:34