Pro*C编程初步 + 栽在了一个非常简单的问题上

搞了好长时间,总算编译过去了……

 

Pro*C程序好像就是用C语言来操作ORACLE数据库的程序(有待考证;-) )

Pro*C程序一般是以pc为后缀的,ORACLE也提供了预编译程序,可以将这些SQL语句之类的都预编译成C或C++程序,然后再编译相应的C/C++程序,生成可执行文件

 

要将pc编译成cpp文件,要使用proc程序:

它的命令用法如下:

proc iname=filename [Option_name1=vatue1 Option_name2=vatue2....]

如:pc文件名为dbop.pc

编译为CPP的命令为:

proc iname=dbop.pc oname=dbop.cpp code=cpp ltype=none

它后面的选项的意思分别为:

iname: 输入项名字

oname:输出项名字

code=cpp : 表示编译成C++程序,此项还可以是Ansi_c, Kr_c

ltype=none : 表示不生成中间的lst文件

 

proc的可选项还很多,如include、sqlcheck、threads等

 

如果没有语法错误,就已经生成了cpp文件

此时就像编译平常的c++程序了,不过要加上一些特定的库,否则会出现某些东西未定义的错误

用g++编译的命令如下:

g++ -g -Wall -L ORACLE_HOME/lib -l clntsh dbop.cpp -o dbop

此时就生成了dbop可执行程序

./dbop就可以运行了

 

下面是一个简单的makefile文件

  1. NAME=dbop
  2. PC=$(NAME).pc
  3. CPP=$(NAME).cpp
  4. PROC_FLAG=code=cpp ltype=none
  5. CC_FLAG=-g -Wall -L ${ORACLE_HOME}/lib -l clntsh
  6. $(NAME): $(CPP)
  7.         g++ $(CC_FLAG) $(CPP) -o $(NAME)
  8. $(CPP): $(PC)
  9.         proc $(PROC_FLAG) iname=$(PC) oname=$(CPP)
  10. clean:
  11.         rm -f *.cpp

我现在也是仅仅编译过了,数据库连接的时候总是出错,有待继续……

 

不过今天早上发现了有史以来最大的一个盲区……,绝对的盲区~~~

 

要设置某对话框上按钮的背景图,所以,想响应WM_CTLCOLORBTN,以前还没用过,只知道接到这个消息的时候,返回Brush就行,而且此时控件必须为自绘才行

但画出来之后,背景是改变了,但是文字的后面不是透明的,文字仍然是放在了一块白色的方块上,太难看了~~~

我明明用SetBkMode来设置了呀,怎么会不行呢?

开始我还以为自绘的按钮比较特别,可能不能这样用,但后来仍然没能解决~

但我仍坚信代码没有问题,即使是调试,都不知道往哪儿调……

但后来一步一步走下去,才终于发现,这么一个简单的问题,我竟然一直都不知道,好像也没在哪儿见到过……

 

我的代码是这样的:

switch(wParam)

{

    SetBkMode(...);

    case IDC_BEGIN:

        DoSomething(...);

        break;

    case IDC_STOP:

        DoOtherthings(...);

        break;

}

我一直坚信代码会顺序往下执行,SetBkMode会正常执行,然后再在下一句判断wParam的值,而且我即使调试的时候也是直接在case后面下断点,也不知道SetBkMode执行没。

后来我把断点下在了switch外面,然后单步走,才发现,根本就不会执行SetBkMode,这才发现问题!!!

 

昨天晚上还有同学问我一个关于switch的简单问题,我给他说肯定×××,口气好像是说,怎么如此简单的问题都要问一下

但今天早上解决的这个问题却出在了这儿,其实这个问题也是在昨天晚上碰到的,当时没能解决,今天早上才解决,发现之后,当时就感觉眩晕~~~

 

估计编译器把switch语句汇编成如下的形式了

mov eax, wParam

cmp eax, IDC_BEGIN

jz lab1

cmp eax, IDC_STOP

jz lab2

jmp lab3    ;default

invoke SetBkMode, ,

lab1:

........

jmp lab4

lab2:

......

jmp lab4

lab3:

......

lab4:

……

 

以上代码纯属猜测,我的人脑编译出来的,非常不可靠 ;-)

 

我记得以前从来没有见到过呀,好像以前学C语言的时候也没在书上看到过,自认为很简单的一个问题,没想到就裁到这上面了。

 

呵呵,一个简单的问题,我竟然长篇大论的乱讲一通,不过,我以前确实不知道……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值