广

oracle数据库

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

    Oracle 9i中OCCI在VC6下不能DEBUG的问题

    2018-04-09 07:42:09 次阅读 稿源:互联网
    广告
    全网推广平台,软文发布

      问题:OCCI在VC6下不能debug:

      winXP VC6-sp6 oracle9.2

      是不是OCCI的库有 开发版和发行版 之分,所以用发行版的oraocci9.lib不能做debug版的程序,string或者vector在释放时总会报错

      Statement类的setXXX()函数为什么我在使用的时候不管用呢?

      文档说NUMBER类型也可以和string转换

      在

    while(rs->next())
    {
    for(i=0; i{
    cout <
    getString(i+1) <<'t';
    }
    cout <}

      这个程序段中,为什么第一行中的NUMBE类型都正常的读出了,但是从第二行开始就不正确了呢

      如果我在while()前先next()几次,仍然是当前循环中的第一行的所有的number类型都正常读出,从第二行开始就又不正常了

      解决方法如下:

      vc6的那个默认的步骤debug肯定行不通。因为OCCI不按这种配置来compile.

      步骤如下:

      1. 确保oci.lib, oraocci9.lib在你的lib路径下边,确保oci/include在你的include路径下边

      2. 确保有下边的宏声明:(#define WIN32COMMON)

    #ifdef WIN32COMMON
    template
    void getVector( ResultSet *rs, unsigned int index,
    OCCI_STD_NAMESPACE::vector< T > &vect) ;
    #else
    template
    void getVector( ResultSet *rs, unsigned int index,
    OCCI_STD_NAMESPACE::vector< T* > &vect) ;
    #endif

      3.这一步最重要,要与VC6的默认配置相区别:

      在project settings的WIN32 DEBUG的"link"下边,将Category: Input下边的

      Object/library modules:

      改为kernel32.lib user32.lib oci.lib msvcrt.lib msvcprt.lib oraocci9.lib (顺序不能错)

      同时,勾上Ignore all default libraries,

      并在Ignore libraries上边填上边libc.lib

      这要build出来以来,执行是不会出现堆错误的。并且可以debug。

      使用occi与其它库进行集成时,尤其要注意这些配置,有的时候甚至出现不相容的情况。所以要根据实际情况进行选择。

      当然,你可以使用MTD, MD方式来build。

      到了VC7以后,OCCI相应的要求就少多了。

      linux下当初OCCI是有很多bug的,除非打了9205及以后的补丁,不然,你几乎无法正常使用。

      如果有再碰到类似问题,请及时回馈。

      附加注释:

      可以看看$ORACLE_HOMEocisamples下的make.bat中对应于OCCI的相关内容:

    :occimakeobj
    ott userid=scott/tiger intype=%1.typ outtype=%1out.type code=cpp hfile=%1h.h cppfile=%1o.cpp mapfile=%1m.cpp attraccess=private
    cl -GX -DWIN32COMMON -I. -I%ORACLE_HOME%ociinclude -I. -D_DLL -D_MT %1.cpp %1m.cpp %1o.cpp /link /LIBPATH:%ORACLE_HOME%ocilibmsvc oci.lib msvcrt.lib msvcprt.lib oraocci9.lib /nod:libc
    goto end
    :occimake
    cl -GX -DWIN32COMMON -I. -I%ORACLE_HOME%ociinclude -I. -D_DLL -D_MT %1.cpp /link /LIBPATH:%ORACLE_HOME%ocilibmsvc oci.lib msvcrt.lib msvcprt.lib oraocci9.lib /nod:libc
    goto end

      至于为什么要/nod:libc,为什么要将msvcrt.lib msvcprt.lib 放到中间,那是因为oracle的occi库在build时依赖顺序不一样。你可以上msdn上查查msvcrt.lib和msvcprt.lib是干嘛用的。

      在侯捷的win32多线程编程里也有相关描述。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告
    广告