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

小情绪humane

小情绪humane

2016-02-19 16:46

今天图老师小编要跟大家分享Oracle 9i中OCCI在VC6下不能DEBUG的问题,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

  问题: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的默认配置相区别:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  在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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

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

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

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
Oracle 9i中OCCI在VC6下不能DEBUG的问题

Oracle 9i 视图

编程语言 网络编程
Oracle 9i 视图

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle 9i锁

编程语言 网络编程
Oracle 9i锁

Oracle 9i索引

编程语言 网络编程
Oracle 9i索引

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Oracle 9i 游标

编程语言 网络编程
Oracle 9i 游标

Oracle 9i 审计

编程语言 网络编程
Oracle 9i 审计

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

时光机2018最新qq分组设计_内心深处,淡淡的伤 - QQ伤感分组

时光机2018最新qq分组设计_内心深处,淡淡的伤 - QQ伤感分组

Win2000下PHP服务器安装攻略

Win2000下PHP服务器安装攻略
下拉加载更多内容 ↓