1、FireMonkey
- 在创建子视图时,主视图所有的控件必需已经命名,如果你的控件没有命名,XE8 会弹出下面的错误:
Cannot inherit from form ‘FormName”. It contains a component with a blank name property.
解决办法是将主视图中所有的控件命好名。
- iOS 应用在使用 Running without Debugging 模式在设备上运行后,可能没有正确的关闭或重新打开
- 解决办法:在设备上的话,手动强制结束应用;在模拟器上的话,在 PAServer 中输入 r 重置状态;
- TWebBrowser 在某些平台上可能不支持某些链接行为,例如 Target 设置为Target “_blank” 或 “_search”
- Android 和 iOS 平台:应用程序打开一个同样的TWebBrowse窗口;
- Windows 平台:应用程序打开一个目标网页的新IE窗口;
- Mac OS X 平台:点击没有任何效果;
2、C++ Builder
- Mac OS X 应用可能在发生 OS 异常时挂起
- 解决办法:重启PAServer,如果还行不行,重启IDE试试;
- 在 iOS 应用中 DWORD 和 ULONG 重复声明的问题
- OS X 头文件 “iodbcunix.h” 和 “sqltypes.h” 声明了这两个类型,而 C++Builder 的 sysmac.h 也声明了它。解决办法是在 iOS 编译配置里定义条件编译选项:_DWORD_DEFINED; _ULONG_DEFINED
- DUnit
- 需要在Project -> Options -> C++ Linker 中设置 Link with the Delphi Runtime Library (rtl package and cp32mt.lib/cp32mti.lib) 选项为true;
- 在 OS X 应用中,发布 bplDUnitXRuntime22.dylib 运行时间包;
- 使用一个 C++ Builder 组件包时不会自动导入依赖关系,会报告找不到 xxx.obj
- 解决办法:手动在项目管理器的 Require 里增加依赖的包
- DirectX 头文件:丢失 d3d.h 等文件
- BCC 64:事件中结构体或5-8个字节的集合作为值参传递不再有效。
- 如果要编译 32 位和 64 位版本时,手动条件编译吧
#ifndef _WIN64 typedef void __fastcall (__closure *TContextPopupEvent)(System::TObject* Sender, const System::Types::TPoint &MousePos, bool &Handled); #else /* _WIN64 */ typedef void __fastcall (__closure *TContextPopupEvent)(System::TObject* Sender, System::Types::TPoint MousePos, bool &Handled); #endif /* _WIN64 */
- 在使用接口做为参数时,不能手动将 IDE 生成的事件函数指定给事件
- 因为两者的声明不一样(男人哭吧哭吧不是罪),看例子,这个是通过 Delphi 单元生成的接口类型定义:
typedef void __fastcall (__closure *TFDConnectionRecoverEvent)(System::TObject* ASender, const Firedac::Stan::Intf::_di_IFDStanObject AInitiator, // <<< *** System::Sysutils::Exception* AException, Firedac::Phys::Intf::TFDPhysConnectionRecoverAction &AAction);
下面是 IDE 生成的事件响应函数定义:
void __fastcall TForm1::FDConnection1Recover(TObject *ASender, const IFDStanObject *AInitiator, // <<< *** Exception *AException, TFDPhysConnectionRecoverAction &AAction)
而解决的办法就是:将 IDE 生成的事件响应函数修改后动态关联。
3、Delphi
- Android 和 iOS 程序使得 AtomicCmpExchange 函数可能造成程序挂起
- 将相应的内容移入到一个单独的单元,然后使用 {$D-} 编译选项来禁止相关的调试信息
4、IDE
- iOS 应用的 CFBundleIdentifier 设置可能会丢失;
- 在多设备窗体设计器,只能从主视图删除一个组件;
- 重命名 iOS 工程可能在运行或高度时失败
- 进 Project -> Deployment 选择 Revert To Default
- Windows Server 2008 上移动设备设置向导内容被阻止
- 点击添加按钮添加例外
- 版本信息不会从 All Platforms 继承,为每一个平台单独设置;
5、数据库
- 在 64 位 Windows 平台上编译包含 TClientDataSet 的应用时可能出现下面的错误:
[DCC Error] E2597 C:\Users\Public\Documents\Embarcadero\Studio\16.0\PlatformSDKs\android-ndk-r9c\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: error: cannot find -lgnustl_static
解决办法是在 SDK Manager 中修改 Android NDK library path 为:
C:\Users\<user>\Documents\Embarcadero\Studio\16.0\CatalogRepository\AndroidSDK-24.0.2\ndk\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a
- 在 C++ Builder 64位程序中使用 FireDAC DataSnap 驱动需要带运行时包DataSnapClient;
- 在 Data Explorer 或 FDExplorer 中添加一个新的连接时,遇到 “Can’t modify file” 错误,下载 FDFixIni 运行并修复它;
- Interbase 的问题(略过吧,估计用的人很少)
6、Box2D
- Delphi 中默认没有提供相应的 DCU 文件,所以在 Project -> Options -> Delphi Compiler 中添加搜索路径 ${BDS)\source\FlatBox2D
7、GetIt
- 不支持 UNC 路径,要使用 UNC 路径的话,映射成一个网络驱动器;
8、IME
- Windows 8 将 IME 的支持模式从每个线程改为了每个用户,所以,如果需要你需要自己调用 API 去更改输入法状态。