PB中如何编写COM和COM+程序.

    COM/COM+作为取代OLE的一种新技术,问世已经很久了,PB7中也早已提供了对它的支持,不过从现实情况上看,似乎大家使用到的不是很多,其实对于新一代的互联网应用,它还是能够发挥很大作用.下面我将从COM/COM+组件的生成,调用,以及应用范围上谈谈我的看法和心得.
    
    我将用PB10为开发工具做说明.假设要做一个表达式计算的COM组件,我想这个例子比较典型,用到了datastore,datawindowobject,用户对象等,既不会太简单,也不会太复杂(代码不多).

    首先最基本的操作,必须先有个WorkSpace,然后打开COM/COM+创建向导:

选中项目后,直接下一步,基本上不用改动,就完成了.

创建完成后,系统就有了一些基本对象:

    

    下面建立一个extend形式的datawindowobject,主要用于计算表达式用的,只要满足有一个列就行了.保存其名字为calc

    然后在n_genapp对象中建立一个计算表达式的函数:

public function string of_calc (string as_expression);
datastore lds_calc
string ls_rtn

lds_calc=create datastore
lds_calc.dataobject="calc"
lds_calc.insertrow(0)

ls_rtn=lds_calc.describe("evaluate('" + as_expression + "', 1)")
destroy lds_calc
return ls_rtn
end function

下面就打开project对象p_genapp_commts,进行发布.

注意,发布的project对象属性中,需要修改为将整个pbl的对象一起发布.

发布完成后,就可以调用了.先试试用pb程序调用:

新建一个程序,和窗口:

窗口上放置一个按钮,按钮中写入代码:

OLEObject OleObj
Integer li_rc

OleObj = CREATE OLEObject
li_rc = OleObj.ConnectToNewObject("PB100.n_genapp.1.0")
IF li_rc < 0 THEN   
 DESTROY OleObj
 MessageBox("Connecting to COM Object Failed",  "Error: " + String(li_rc))
 Return
END IF
sle_2.text=string(OleObj.of_calc(sle_1.text))
OleObj.DisconnectObject()
DESTROY OleObj

执行后,就可以看到计算结果了.

    下面我们看看,在其他开发工具中如何调用此COM组件,以BCB6为例:

    首先将genapp.dll导入类型库:

执行安装,将COM组件安装到控件面板,然后建立一个窗口,放置几个控件:

在"调用PBCOM"按钮中Clicked事件写代码:

        WideString ls_express;
        ls_express=Edit1->Text;
        Edit2->Text = COClass_n_genapp1->of_calc(ls_express);

点击按钮,就可以看到计算结果了.

用VB调用也比较简单,VC调用稍微复杂点,这里就不缀述了.

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
控制风扇的转速通常需要使用PWM(脉宽调制)技术,而在C语言,可以使用定时器来实现PWM的功能。下面给出一个简单的调速风机的程序: ```c #include <avr/io.h> #include <avr/interrupt.h> // 定义风扇控制引脚 #define FAN_PIN PB1 // 定义定时器常数 #define TIMER_MAX 255 // 定义风扇转速数组,可以根据需要调整 uint8_t fan_speeds[] = {0, 51, 102, 153, 204, 255}; // 定义当前风扇转速 volatile uint8_t fan_speed = 0; // 初始化定时器 void init_timer() { // 设置定时器1为8位PWM模式 TCCR1A = (1 << WGM10) | (1 << WGM11) | (1 << COM1A1); // 设置定时器1时钟源为系统时钟/64 TCCR1B = (1 << CS11) | (1 << CS10); // 设置比较值 OCR1A = fan_speeds[fan_speed]; // 开启定时器1断 TIMSK1 = (1 << TOIE1); } // 定时器1溢出断 ISR(TIMER1_OVF_vect) { // 更新比较值 OCR1A = fan_speeds[fan_speed]; } int main(void) { // 设置风扇控制引脚为输出 DDRB |= (1 << FAN_PIN); // 初始化定时器 init_timer(); // 开启全局断 sei(); while (1) { // 获取风扇转速,可以根据需要从传感器、串口、按键等获取 // 这里简单地循环调整风扇转速 for (uint8_t i = 0; i < 6; i++) { fan_speed = i; _delay_ms(1000); } } } ``` 这个程序使用了AVR单片机的定时器1来实现PWM输出,控制风扇的转速。在程序,我们定义了一个风扇控制引脚(PB1),使用定时器1的PWM输出控制这个引脚,从而控制风扇的转速。在定时器1的溢出,我们更新了比较值,从而改变PWM的占空比,进而改变风扇的转速。在主循环,我们简单地循环调整风扇转速,可以根据需要从传感器、串口、按键等获取。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值