• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2008-8-12 15:29 | 作者: 网络转载 | 来源: 本站原创 | 查看: 46次 | 进入软件测试论坛讨论

领测软件测试网  问题: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

  }

 

  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_HOME\oci\samples下的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%\oci\include -I. -D_DLL -D_MT %1.cpp %1m.cpp %1o.cpp /link /LIBPATH:%ORACLE_HOME%\oci\lib\msvc oci.lib msvcrt.lib msvcprt.lib oraocci9.lib /nod:libc

 

  goto end

 

  :occimake

 

  cl -GX -DWIN32COMMON -I. -I%ORACLE_HOME%\oci\include -I. -D_DLL -D_MT %1.cpp /link /LIBPATH:%ORACLE_HOME%\oci\lib\msvc 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多线程编程里也有相关描述。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: debug oracle ORACLE Oracle DEBUG OCCI


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网