【发布时间】:2017-04-19 17:21:28
【问题描述】:
尝试将包括 SQLite 数据加密在内的有效 Win32 项目移植到 OS X,我发现了一个问题。
该项目是使用 RAD Studio Berlin 10.1 和 C++ Builder 特性开发的。它包括组件 FDSQLiteSecurity。使用 Delphi 个性也会出现此问题。
单元包含:
TDFConnection *FDConnection1;
TFDPhysSQLiteDriverLink *FDPhysSQLiteDriverLink1;
TFDSQLiteSecurity *FDSQLiteSecurity1;
这是我的一段代码:
String DatabaseName, Password;
...
#ifdef WIN32
DatabaseName = "C:\\...\\MyDB.db";
#endif
#ifdef MACOS
DatabaseName = "/.../MyDB.db";
#endif
Password = "mypassword";
...
FDConnection1->Params->Values["Database"] = DatabaseName;
FDSQLiteSecurity1->Database = DatabaseName;
FDSQLiteSecurity1->Password = Password;
FDConnection1->Params->Values["Password"] = Password;
FDConnection1->Connected = true;
...
在 OS X 上,连接会引发 EAccessViolation。
程序通过删除安全管理行,使用非加密文件正常工作。
提前感谢您的任何建议!
【问题讨论】:
-
除了 EAccessViolation 之外没有可用的信息吗?没有错误消息,没有堆栈跟踪,什么都没有?如果您在
FDConnection1->Params-Values["Database"] = DatabaseName;设置断点然后评估FDSQLLiteSecurity(它应该是FDSQLLiteSecurity1),调试器会告诉您什么? -
@Ken,感谢您的回答。以下是更多信息:“项目测试引发了异常类 EAccessViolation,其中“地址 00132AAA 的访问冲突,访问地址 00132AAA”。不再报告调试错误消息。该程序可以运行到“FDConnection1->Connected = true;”。然后发生异常。此时堆栈报告“进程不可访问”。在引发异常之前评估 FDSQLLiteSecurity1,它的属性设置正确。组件名称为FDSQLLiteSecurity1,只是打字垃圾(已更正)。
-
您能否edit 您的帖子并将该信息放入问题本身,它所属的位置,而不是埋在 cmets 中?
标签: sqlite delphi encryption c++builder