最近在项目中引入sqlite3加密(wxSQLite、SQLCipher)相关代码时,编译遇到如下错误:例如,error C2440: “初始化”: 无法从“void *”转换为“sqlcipher_provider *”
分析发现如下原因:
项目中工程的编译方式是“编译为C++代码(/TP)“,而我是将sqlite3.c手动拖入到工程中,打开.vcxproj工程文件可以看到如下按C方式编译的信息
<ClCompile Include="sqlite3.c" >
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsC</CompileAs>
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsC</CompileAs>
<CompileAs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|Win32'">CompileAsC</CompileAs>
<CompileAs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|Win32'">CompileAsC</CompileAs>
</ClCompile>
这样两者便有矛盾。
解决方法:
方法1、不使用拖入sqlite3.c到工程的方式,改用项目中的CMake添加,查看工程文件可以看到是按如下默认方式加入工程
<ClCompile Include="sqlite3.c" />
方法2、右键打开工程属性->配置属性->C/C++->高级->编译为选项从“编译为C++代码(/TP)”改为“默认值”