免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7020 | 回复: 2
打印 上一主题 下一主题

如何在VC++下集成使用Proc*C/C++(原创) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-25 11:55 |只看该作者 |倒序浏览
我想很多人在VC下连接Oracle数据库时,一般使用ODBC或ADO控件,而使用Proc*C/C++应该会比较少。并且我在网上搜索了一下,关于这方面的介绍也不多。本人也是因工作需要而使用它,在对此一无所知的情况下,十分感谢“时代朝阳数据库技术中心”:
http://www.xiaotong-db.com.cn/kfgj/oracle/kfgj/O8I_proc_jc_vc.htm
给了我启发。现在把本人的经验,贴出来让大家分享(以下是围绕着产生cpp文件来说明的)。
1、设置目录:
    打开“tools->;Options”,转到“Directories”页,在"Show Directories for"中
       1)选“Executable Files”,在列表中加入proc.exe的目录(ORACLE_HOME\bin):
      如:D:\oracle\ora81\bin
       2)选“Include Files”,在列表中加入proc*c/c++包含头文件的目录(ORACLE_HOME\PRECOMP\PUBLIC):
      如:D:\ORACLE\ORA81\PRECOMP\PUBLIC
        3)选“Library Files”,在列表中加入proc*c/c++ Lib所在的目录(ORACLE_HOME\PRECOMP\LIB\MSVC):
      如:D:\ORACLE\ORA81\PRECOMP\LIB\MSVC
        *注:我的oracle客户端程序是安装在D:\oracle\ora81下;
2、建立一MFC工程(这步在此不作介绍);
3、往工程中加入,Proc*c/c++的源和头文件(这步在此也不作介绍),例加入oratools.pc、oratools.h;
oratools.h

  1. #ifndef __LZP_ORACLE_TOOLS_HEAD__
  2. #define __LZP_ORACLE_TOOLS_HEAD__

  3. class CLzpOracle
  4. {
  5. public:
  6.         CLzpOracle();
  7.         ~CLzpOracle();

  8.         int ConnectDatabase(char *strConn);
  9. };


  10. #endif
复制代码


oratools.pc

  1. #include "stdafx.h"
  2. #include "oratools.h"


  3. /*SQL通讯区说明*/
  4. EXEC SQL INCLUDE SQLCA;
  5. /*SQL错误处理说明语句*/
  6. EXEC SQL WHENEVER SQLERROR CONTINUE;
  7. EXEC SQL WHENEVER NOTFOUND CONTINUE;


  8. CLzpOracle::CLzpOracle()
  9. {
  10. }

  11. CLzpOracle::~CLzpOracle()
  12. {
  13. }

  14. int CLzpOracle::ConnectDatabase(char *strConn)
  15. {
  16.         EXEC SQL BEGIN DECLARE SECTION;
  17.                 char usrpwd[60];
  18.         EXEC SQL END DECLARE SECTION;

  19.         strcpy(usrpwd,strConn);
  20.         EXEC SQL CONNECT :usrpwd;
  21.         if (sqlca.sqlcode < 0)
  22.         {
  23.                 return -1;
  24.         }
  25.         return 0;
  26. }
复制代码


4、右击新加入的proc*c/c++文件(如oratools.pc),选择"settings..."到"project settings",然后Custom Build页:
       在Commands下写入命令:proc 输入入文件名 oname=输出文件名(如:proc oratools.pc oname=oratools.cpp) 注如果要生成.cpp文件,oname=这项一定要填,不然它会自动生成.c文件
       在Outputs下写入输出文件名(如oratools.cpp),这项我刚开始以为不写上面的oname=,会输出这里填写的文件名,但事实上并不是这样;
5、然后编译工程,它将会自动预编译产生c/c++文件(如oratols.cpp),然后把这个文件作如下修改:
       1)把#include "stdafx.h"提到最前面;
       2)把函数的定义用下面的括起
         #ifdef  __cplusplus
         extern "C" {
         #endif
         
         #ifdef  __cplusplus
         }
         #endif


  1. #ifdef  __cplusplus
  2. extern "C" {
  3. #endif


  4. /* SQLLIB Prototypes */
  5. extern void sqlcxt (void **, unsigned long *,
  6.                     struct sqlexd *, const struct sqlcxp *);
  7. extern void sqlcx2t(void **, unsigned long *,
  8.                     struct sqlexd *, const struct sqlcxp *);
  9. extern void sqlbuft(void **, char *);
  10. extern void sqlgs2t(void **, char *);
  11. extern void sqlorat(void **, unsigned long *, void *);

  12. /* Forms Interface */
  13. static const int IAPSUCC = 0;
  14. static const int IAPFAIL = 1403;
  15. static const int IAPFTL  = 535;
  16. extern void sqliem(char *, int *);

  17. #ifdef  __cplusplus
  18. }
  19. #endif
复制代码

6、把lib文件加入工程中:
       project->;settings->;link->;object/library modules中加入oraSQL8.lib.
7、最后编译链接产生可执行文件。注:如果重编译整个工程时,如果是产生.cpp文件一定别忘了修改预编译产生的文件。

论坛徽章:
0
2 [报告]
发表于 2004-05-25 14:23 |只看该作者

如何在VC++下集成使用Proc*C/C++(原创)

前段时间也在搞这个,很不错,谢谢!

论坛徽章:
0
3 [报告]
发表于 2004-05-25 17:59 |只看该作者

如何在VC++下集成使用Proc*C/C++(原创)

5、然后编译工程,它将会自动预编译产生c/c++文件(如oratols.cpp),然后把这个文件作如下修改:
1)把#include "stdafx.h"提到最前面;
2)把函数的定义用下面的括起
#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif


由于这样每次重编译都要去修改文件会比较烦,用以下方法可以做到不用修改:
1、对于第一点可以不编译头文件:
     选择project->;settings...到C/C++页,在Category中选择“Precomplied Headers”在单选框上选择第二项“Automatic use of Precomplied Headers”
2、对于第二点则可以在第四步中的命令改为如下:
     proc oratools.pc code=CPP
        注:这时可以不用加oname=oratools.cpp
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP