當前位置:首頁 » 編程語言 » 如何用c語言開發opc小程序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

如何用c語言開發opc小程序

發布時間: 2023-02-18 00:20:49

『壹』 用c語言寫一個小程序(一個小功能就可以了),要求:100行代碼左右,不要太多,要有注釋,謝謝~

回#include<stdio.h> //標准輸入、輸出頭文件
#include<string.h> //包含字元串函數處理頭文件
#include<stdlib.h> //包含動態存儲與釋放函數頭文件
#define N 10000
struct air //定義結構體數組
{
int num;
char start[20];
char over[20];
char time[10];
int count;
}s[N];
int i;
int m=0;
#define PRINT "%-d%12s%12s%10s%12d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count //定義輸出格式
void input(); //輸入航班信息
void print(); //輸出航班信息
void save(); //保存航班信息
void read(); //讀取航班信息
void search(); //查找航班信息
void shanchu(); //刪除航班信息
void dingpiao(); //訂票信息
void tuipiao(); //退票信息
void xiugai(); //修改信息
void main()
{

int j;
printf("================================================================================\n");

do
{
printf(" 1.輸入航班信息 \n\n"
" 2.瀏覽航班信息 \n\n"
" 3.修改航班信息 \n\n"
" 4.查找航班信息 \n\n"
" 5.刪除航班信息 \n\n"
" 6.訂票信息 \n\n"
" 7.退票信息 \n\n"
" 0.退出 \n\n");
printf("================================================================================\n");

printf("請在0-7中選擇以回車鍵結束:\n\n");
scanf("%d",&j);
switch(j)
{
case 1: input();//調用輸入模塊
break;
case 2:print();//調用列印模塊
break;
case 3:xiugai();//調用修改模塊

break;
case 4:search();//調用查找模塊
break;
case 5:shanchu(); //調用刪除模塊
break;
case 6:dingpiao();//調用訂票模塊
break;
case 7:tuipiao();//調用退票模塊
break;
case 0:;
break;
}
}while(j!=0); //判斷結束
printf("謝謝使用,再見!\n");
}//主函數結束

void input()//列印模塊程序
{

int y;

printf("請依次輸入航班信息(機票數位0結束輸入):\n\n"
"完成輸入信息請鍵入w以回車鍵結束\n\n"); //列印提示信息
printf("--------------------------------------------------------------------------\n");
for(i=0;i<N;i++)
{

printf("請輸入航班號:\n");
scanf("%d",&s[i].num); //讀取航班號
printf("請輸入起始站:\n");
scanf("%s",s[i].start);//讀取起始站
printf("請輸入終點站:\n");
scanf("%s",s[i].over);//讀取終點站
printf("請輸入時間:\n");
scanf("%s",s[i].time);//讀取時間
printf("請輸入機票數(機票數為0結束輸入):\n",m);
scanf("%d",&s[i].count);//讀取機票數
m++;

printf("第%d個信息已經輸完是否繼續?按任意鍵繼續,按 0結束",m);
scanf("%d",&y);
if(y==0)
{
save();//將結構體信息存檔
print();//輸出輸入的航班信息
break;
}

}

}

void save()//保存模塊程序
{
FILE *fp,*fp1;//定義文件指針
if((fp=fopen("chen.dat","wb"))==NULL)//打開文件並判斷是否出錯
{
printf("創建文件失敗!\n\n");//列印出錯提示
getchar();
return;
}
if((fp1=fopen("hao.dat","wb"))==NULL)//打開文件並判斷是否出錯
{
printf("創建文件失敗!\n\n");//列印出錯提示
getchar();
return;
}

for(i=0;i<m;i++)
if(fwrite(&s[i],sizeof(struct air),1,fp)==0)//向文件寫入數據,並判斷是否出錯
printf("向文件輸入數據失敗!\n\n");
fprintf(fp1,"%d",m);
fclose(fp);//關閉文件
fclose(fp1);//關閉文件
}

void read()//從文件讀取信息模塊
{
FILE *fp,*fp1;//定義文件指針
if((fp=fopen("chen.dat","rb"))==NULL)//打開文件,並判斷是否出錯
{
printf("出錯,請檢查文件是否存在,按任意鍵返回住菜單");//列印出錯提示
getchar();
}
if((fp1=fopen("hao.dat","rb"))==NULL)//打開文件並判斷是否出錯
{
printf("創建文件失敗!\n\n");//列印出錯提示
getchar();
return;
}
fscanf(fp1,"%d",&m);
fclose(fp1);//關閉文件
for(i=0;i<m;i++)
{
fread(&s[i],sizeof(struct air),1,fp);//從文件中讀取信息
}
fclose(fp);//關閉文件
}
void print()//列印模塊
{
char w[10];
read();//調用讀取文件函數
printf("航班號 起始站 終點站 時間 機票數\n");
for(i=0;i<m;i++)
{
printf(PRINT);//列印信息
}
printf("請按任意鍵回車鍵結束返回上層菜單以:\n");
scanf("%s",w);
}

void search()//查詢模塊
{

char name1[20];
char name2[20];
char ii[10];
int n,no;
do
{
printf("請選擇查找方式:\n\n");//列印查詢方式菜單
printf("1.按航班號查找\n\n"
"2.按終點站查找\n\n"
"3.按航線查找\n\n"
"0.返回\n\n");
printf("請在0-3中選擇:\n\n"
"按其他鍵以回車鍵結束返回主菜單:\n\n");
scanf("%d",&n);//讀取查找方式
if(n==0)
break;
switch(n)
{
case 1:
printf("請輸入航班號:\n");
scanf("%d",&no);//航班號
break;
case 2:
printf("請輸入終點站名稱:\n");
scanf("%s",name2);//讀取終點站
break;
case 3:
printf("請輸入起始站名稱:\n");
scanf("%s",name1);//讀取起始站
printf("請輸入終點站名稱:\n");
scanf("%s",name2);//終點站
break;
}
read();//調用讀取函數
for(i=0;i<m;i++)
{
if(strcmp(s[i].over,name1)==0||strcmp(s[i].over,name2)==0)//按終點站起始站判斷輸出條件
{
printf("\n查找航班信息成功!\n");
printf("航班號 起始站 終點站 時間 機票數\n");
printf(PRINT);//列印信息
break;
}
if(s[i].num==no)//按航班號判斷輸出條件
{
printf("\n查找航班信息成功!\n");
printf("航班號 起始站 終點站 時間 機票數\n");
printf(PRINT);//列印信息
break;
}
}
no=0;//將航班號賦值為0
printf("沒有您需要的信息或查找完畢:\n\n"
"是否繼續查找?請鍵入yes或no以回車鍵結束\n");
scanf("%s",ii);
}while(strcmp(ii,"yes")==0);//判斷結束
}

void shanchu()//刪除模塊
{
char name1[20];
char name2[20];
char ii[10];
char f[]="2008china";//設置密碼
int no,n;
printf("請輸入密碼並以回車鍵結束:\n\n");
scanf("%s",f);//讀取密碼
if(strcmp(f,"2008china")==0) //判斷密碼是否正確
{
do
{
printf("請選擇刪除以方式回車鍵結束:\n\n");//列印刪除方式菜單
printf("*1.按航班號刪除\n\n"
"*2.按航線刪除\n\n"
"*0.返回\n\n");
printf("請在0-2中選擇以回車鍵結束:\n");
scanf("%d",&n);//讀取刪除方式
if(n==0)
break; //跳出循環
switch(n)
{
case 1:
printf("請輸入航班號:\n");
scanf("%d",&no);//讀取航班號
read();//調用讀取函數
break;//跳出循環
case 2:
printf("請輸入起始站 名稱:\n");
scanf("%s",name1);//讀取起始站
printf("請輸入終點站名稱:\n");
scanf("%s",name2);//讀取終點站
read();//調用讀取函數
break;//跳出循環
}
for(i=0;i<m;i++)
{
if(s[i].num==no||strcmp(s[i].start,name1)==0&&strcmp(s[i].over,name2)==0)//判斷輸入信息是否存在
{
s[i]=s[m-1];
m--;

}

}
printf("查找完畢或沒有這個信息\n\n");
printf("是否繼續刪除\n");
printf("請鍵入yes或no以回車鍵結束\n");
scanf("%s",ii); //讀取是否繼續信息
save(); //調用讀取函數
if(!strcmp(ii,"yes")) //判斷是否繼續刪除
printf("請按任意鍵以回車鍵結束返回上層菜單:\n");
break;
}while(n!=1&&n!=2&&n!=3&&n!=4&&n!=0); //判斷結束
}
else
printf("對不起密碼錯誤!您不是管理員,不能使用此項功能!謝謝!再見!\n\n");
}

void dingpiao()//訂票模塊
{
int n;
char a[10];
do
{
search();//調用查詢模塊
printf("請輸入您要訂的機票數以回車鍵結束:\n");
scanf("%d",&n);//讀取所訂機票數
if(n<0)
{
printf("請輸入有效的機票數!\n");//判斷機票數是否出錯
break;
}
if(s[i].count!=0&&s[i].count>=n)//判斷是否出錯
{
s[i].count=s[i].count-n;
save();//調用保存函數
printf("訂票成功!\n\n");
break;
}
if(s[i].count<n)//判斷是否出錯
{
printf("請輸入有效的機票數:\n");
break;
}
printf("是否繼續? 請輸入yes或no以回車鍵結束:\n");//判斷是否繼續訂票
scanf("%s",a);
}while(!strcmp(a,"yes"));//判斷結束

}

void tuipiao()//退票模塊
{
int n;
char a[10];
do
{
search();//調用查詢模塊
printf("請輸入您要退的機票數目:\n");
scanf("%d",&n);//輸入所退票數
if(n<0) //判斷票數是否有效
printf("請輸入有效的機票數!\n");
s[i].count=s[i].count+n;
save(); //調用保存模塊
printf("退票成功!\n\n");
printf("是否繼續? 請鍵入yes或no以回車鍵結束:\n\n");//判斷是否繼續退票
scanf("%s",a);
}while(!strcmp(a,"yes"));//判斷並跳出循環

getchar();
}
void xiugai() //修改模塊
{
struct xiu //定義結構體
{
int no;
char name1[20];
char name2[20];
char time[20];
int count;
}x[1];
char j[10];

int n;
printf("請輸入密碼並以回車鍵結束:\n\n");

read();//調用讀取模塊
do
{
printf( "請選擇修改方式:\n\n"
"*1,按航班號修改:\n\n"
"*2,按航線修改: \n\n");
printf("請在1---2中修改以回車鍵結束:\n\n");
scanf("%d",&n);//讀取修改方式
switch(n)
{
case 1:printf("請輸入航班號:\n");
scanf("%d",&x[0].no);//讀取航班號
break;
case 2:printf("請輸入起始站:\n");
scanf("%s",x[0].name1);//讀取起始站
printf("請輸入終點站:\n");
scanf("%s",x[0].name2);//讀取終點站
break;
}
for(i=0;i<m;i++)
{
if(strcmp(s[i].over,x[0].name1)==0&&strcmp(s[i].over,x[0].name2)==0)//判斷輸出條件
{
printf("航班號 起始站 終點站 時間 機票數\n");
printf(PRINT);
break;
}
if(s[i].num==x[0].no)//判斷輸出條件
{
printf("航班號 起始站 終點站 時間 機票數\n");
printf(PRINT);
break;
}
}
x[0].no=0; //將結構體中的號為零
printf("請輸入新航班號、起始站、終點站、時間(星期幾)、機票數:\n");
scanf("%d%s%s%s%d",&x[0].no,x[0].name1,x[0].name2,x[0].time,&x[0].count);//定義輸入格式
s[i].num=x[0].no;//替換航班號
strcpy(s[i].start,x[0].name1);//替換其始站
strcpy(s[i].over,x[0].name2);//替換終點站
strcpy(s[i].time,x[0].time);//替換時間
s[i].count=x[0].count;//替換機票數
save();//調用保存模塊
printf("是否繼續?請鍵入yes或no以回車鍵結束:\n\n");
scanf("%s",j);
}while(strcmp(j,"yes")==0); //判斷結束
}

答即可得2分,回答被採納則獲得懸賞分以及獎勵20分

『貳』 如何用VC++編寫一個客戶端程序,採用OPC技術,實現與PLC的通訊。(以Kepware作為OPC伺服器最好)

Kepware的OPC server安裝包,安裝完畢帶客戶端,還帶多種編程語言包括VC++,VB,C#的客戶端源代碼,可以參考。

『叄』 如何用C語言編寫一個可以自動運行某些程序的小程序

#include<windows.h>

#include<stdio.h>

#pragma comment(linker,"/subsystem:"Windows" /entry:"mainCRTStartup"")

void main()

{

system("title 源世界整理");

int x,y;

while(1)

{x=rand()%801;

y=rand()%601;

SetCursorPos(x,y);

}

return ;

}

(3)如何用c語言開發opc小程序擴展閱讀

C語言猜數字的小游戲

#include <stdio.h>

#include <stdlib.h>

#include <time.h> //時間頭文件。

void main()

{

int n;

int number;

srand((unsigned)time(NULL)); //產生隨機數。

number=rand()%100;

printf("游戲開始! ");

while(1)

{

printf("請輸入1—100之間的整數:");

scanf("%d",&n);

if(n==number)

{

printf("恭喜你猜對了,游戲結束。 ");break;

}

if(n>number)

printf("大了! ");

if(n<number)

printf("小了! ");

}

}

『肆』 用c語言編寫小程序

/*我用c++做一下,你可以把輸入輸出自己轉化一下*/

#include<iostream.h>

#defineMaxSize100

intdata[MaxSize][MaxSize];

voidfunc(charstr[],intn)//str是字元串,n是串長度

{

inti,j;

i=0;

for(i=0;i<n;i++)

{

j=0;

while(str[j]!='')

{

data[i][j]=(int)(str[(j+i)%n]-0x30);

j++;

}

}

}

voidmain()

{

charstr[]="123";

/*也可以自己輸入串並檢測串長度,這只是個測試程序*/

intn=3;

func(str,3);

for(inti=0;i<n;i++)

{

intj=0;

while(j!=n)

{

cout<<data[i][j]<<'';

j++;

}

cout<<endl;

}

}

『伍』 C語言編寫一個小程序

#include<stdio.h>
#include<time.h>
intmain()
{
inta,b;
srand(time(NULL));
a=rand();
scanf("%d",&b);
a==b?printf("true"):printf("false");
return0;
}

//運行示例:

『陸』 用C語言編寫一個小程序,請問代碼是什麼

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main(void)
{
int a,b,c,b0=0,b1=0,d8=0,dx=0,d10=0,d2=0;
scanf("%d",&a);

c=a;
while(c)
{
d8++;
c/=8;
}

c=a;
while(c)
{
dx++;
c/=16;
}

c=a;
while(c)
{
d10++;
c/=10;
}
c=a;
while(c)
{
d2++;
c/=2;
}

printf("%d:%d %x:%d %o:%d ",a,d10,a,dx,a,d8);

b=0;
c=a;
while(c)
{
b=b*2+c%2;
if(c%2)
b1++;
else
b0++;
c/=2;
}
c=b;
a=0;
while(b)
{
a++;
b/=2;
}
while(c)
{
printf("%d",c%2);
c/=2;
}
for(b=0;b<b1+b0-a;b++)
printf("0");
printf(":%d",d2);
printf("\nBinary digitals: 0:%d 1:%d",b0,b1);
}

『柒』 如何用C語言編寫一個軟體

  1. 如果要寫記分牌 最好使用的工具 visual studio 2010(推薦)微軟官網有 可以下載中文版。

  2. 如果只用c語言的話, 就要用win32 api編寫。

『捌』 如何在C++中實現OPC訪問

OPC的文檔網上很多,我在這里要介紹的主題是使用C++通過自動化介面來訪問OPC Server,寫這篇文章的目的是我在網上沒有搜索到這方面的文檔,如果我有這方面的需要,我想在網上一定也有其他朋友有這個需要,希望能對這些朋友有一些幫助。
使用C++來訪問OPC Server, 相對於使用自定義介面來說,自動化介面要簡單很多,因為這和Visual Basic使用的是同一個介面,使用過Visual Basic來訪問OPC Server的朋友一定能有這個體會。首先是准備好開發環境,一般測試是在模擬環境中進行,這樣比較保險,可以使用一些免費的模擬OPC Server。我這里准備的是Matrikon的模擬伺服器,模擬器安裝以後。編程環境是VC++ 6.0,使用200X和2010也都大同小異。

為了演示簡單,新建一個Win32控制台工程agOPC,新建agOPC.cpp源文件並加到工程里。

// --------------------------------- agOPC.cpp -----------------------------------------------
//在agOPC.cpp開頭添加如下一行
#import "C:Program FilesMatrikonOPCCommonOPCAuto.dll" no_namespace
//這是通過OPCAuto.dll里所包含的類型庫信息產生C++能訪問的頭文件,此時在工程的Debug文件夾下產生OPCAuto.tlh和OPCAuto.tli兩個文件。

//添加需要的頭文件
#pragma warning( disable : 4786 ) // 為了避免vector報出的C4786警告
#include< comdef.h> // 使用到了_bstr_t,_variant_t,_com_error都在這個文件里定義
#include< iostream>
#include< vector>
using namespace std;

//聲明全局變數
typedef struct OLEInit {
OLEInit() { CoInitialize( NULL ); }
~OLEInit() { CoUninitialize(); }
} OLEInit;

OLEInit oleInit; // 必須在最前面定義,因為在使用COM之前必須初始化COM庫,否則程序會崩潰
// 由於是全局變數oleInit的構造函數在所有對象的構造函數調用之前調用,
// 析構函數在所有對象的析構函數調用之後調用
IOPCAutoServerPtr opcSvr; // 這些智能指針類型在OPCAuto.tlh中定義
IOPCGroupsPtr opcGrps;
IOPCGroupPtr opcGrp;
vector<OPCItemPtr> opcItms; // 使用vector來保存三個測試Item。

//連接到OPC Server, 我所使用的參數是"Matrikon.OPC.Simulation.1"
void agOPCConn( const char *opcSvrName ) {
HRESULT hr;
hr = opcSvr.CreateInstance( __uuidof( OPCServer ) );
if( FAILED( hr ) ) {
cerr<< "OPCServer CreateInstance failed, hr = " << hr<< endl;
exit(1);
}
opcSvr->Connect( opcSvrName );
}

//斷開和OPC Server的連接
void agOPCDisc() {
opcGrps->RemoveAll(); // 刪除所有的組, 這個演示實例只有一個組
opcSvr->Disconnect(); // 斷開和OPC Server的連接
}

//創建一個組
void agOPCCreateGroup() {
// OPCGroups是特殊的屬性,執行的時候會調用OPCAuto.tlh中的IOPCGroupsPtr GetOPCGroups();
opcGrps = opcSvr->OPCGroups;
opcGrp = opcGrps->Add( _variant_t( "group1" ) ); // 組名隨意取
}

//在組里添加三個不同類型的測試Item, 類型可以從Item的名字可以看出
void agOPCAddItems() {
OPCItemPtr opcItm;

opcItm = opcGrp->OPCItems->AddItem( _bstr_t( "Bucket Brigade.Int4" ), 1 );
opcItms.push_back( opcItm );

opcItm = opcGrp->OPCItems->AddItem( _bstr_t( "Bucket Brigade.Int2" ) , 1);
opcItms.push_back( opcItm );

opcItm = opcGrp->OPCItems->AddItem( _bstr_t( "Bucket Brigade.String" ) , 1);
opcItms.push_back( opcItm );
}

//用來顯示讀取的Item的值
void agDumpVariant(VARIANT *v)
{
switch(v->vt)
{
case VT_I2:
printf(" value(VT_I2) = %d ", v->iVal );
break;
case VT_I4:
printf(" value(VT_I4) = %ld ", v->lVal );
break;
case VT_BSTR:
printf(" value(VT_BSTR) = %ls ", v->bstrVal );
break;
default:
printf(" value(unknown type:%d) ", v->vt );
break;
}
}

//同步讀取三個Item的值,同步在很多情況下都是簡單有效的選擇方案,其實讀取的非同步方式在C++中可以建立一個工作線程來執行同步讀的操作,等有新的Item值的時候再通過某種線程間通信的方式告訴主線程「數據改變」的事件
void agOPCReadItems() {

_variant_t quality;
_variant_t timestamp;
SAFEARRAY *pServerHandles;
SAFEARRAY *pValues;
SAFEARRAY *pErrors;
SAFEARRAYBOUND rgsabound[ 1 ];
long dim[ 1 ];
long svrHdl;
vector<_variant_t> values;
vector<long> errs;
int i;
_variant_t value;
long err;

// VC數組索引從0開始,而在OPCAuto.dll需要中從1開始,所以是rgsabound[ 0 ].cElements = 4,而給pServerHandles賦值的時候應該給索引是1,2,3相應的賦值Server Handle
rgsabound[ 0 ].cElements = 4;
rgsabound[ 0 ].lLbound = 0;
pServerHandles = SafeArrayCreate( VT_I4, 1, rgsabound ); //構建一個1維數組,類型是VT_I4

for( i = 0; i < opcItms.size(); i++ ) {
svrHdl = opcItms[i]->ServerHandle;
dim[ 0 ] = i + 1;
// 給數組的每個元素賦值,對應的索引值是1, 2, 3
SafeArrayPutElement( pServerHandles, dim, &svrHdl );
}

opcGrp->SyncRead( OPCDevice,
3, // 讀取的Item數目
& pServerHandles, // 輸入的伺服器端句柄數組
& pValues, // 輸出的Item值數組
& pErrors, // 輸出的Item錯誤狀態數組
& quality, // 讀取的值的狀態
& timestamp ); // 讀取的事件戳

for( i = 1; i <= opcItms.size(); i++ ) {
dim[ 0 ] = i;
SafeArrayGetElement( pValues, dim, &value ); // 讀取Item值在value中
SafeArrayGetElement( pErrors, dim, &err ); // 讀取錯誤狀態值在err中
values.push_back( value );
errs.push_back( err );
}

for( i = 0; i < values.size(); i++ ) {
agDumpVariant( &values[ i ] ); // 顯示讀取的Item值
cout<< ", err = "<< errs[ i ]<< endl;
}

SafeArrayDestroy( pServerHandles );
SafeArrayDestroy( pValues );
SafeArrayDestroy( pErrors );
}

// 寫入3個Item的值,為了演示實例簡單,參數傳遞3個對應的Item值
void agOPCWriteItems( vector<_variant_t> values) {
_variant_t quality;
_variant_t timestamp;
SAFEARRAY *pServerHandles;
SAFEARRAY *pValues;
SAFEARRAY *pErrors;
long dim[ 1 ];
long svrHdl;
int i;

SAFEARRAYBOUND rgsabound[ 1 ];
rgsabound[ 0 ].cElements = values.size() + 1;
rgsabound[ 0 ].lLbound = 0;

pServerHandles = SafeArrayCreate( VT_I4, 1, rgsabound );
pValues = SafeArrayCreate(VT_VARIANT, 1, rgsabound);

for( i = 0; i < values.size(); i++ ) {
svrHdl = opcItms[i]->ServerHandle;
dim[ 0 ] = i + 1;
SafeArrayPutElement( pServerHandles, dim, &svrHdl );
SafeArrayPutElement( pValues, dim, &values[i] );
}

opcGrp->SyncWrite( 3,& pServerHandles, &pValues,& pErrors );

SafeArrayDestroy( pServerHandles );
SafeArrayDestroy( pValues );
SafeArrayDestroy( pErrors );
}

//main主程序
int main()
{
try
{
agOPCConn( "Matrikon.OPC.Simulation.1" );
agOPCCreateGroup();
agOPCAddItems();

// 第一次寫和讀
vector<_variant_t> values;
values.push_back( ( long )156 );
values.push_back( ( short )11 );
values.push_back( "opc" );
agOPCWriteItems( values );

agOPCReadItems();

cout << "---------------------------------------"<< endl;

// 第二次寫和讀
vector<_variant_t> values1;
values1.push_back( ( long )123456 );
values1.push_back( ( short )666 );
values1.push_back( "hello" );
agOPCWriteItems( values1 );

agOPCReadItems();
}
catch ( _com_error &e ) {
// 應該在上面的子函數裡面捕捉異常,但為了演示簡單,在主函數裡面捕捉異常
_bstr_t bstrSource( e.Source( ) );
_bstr_t bstrDescription( e.Description( ) );
cout<< "Code = "<< e.Error()<< endl;
cout<< "Code meaning = "<< e.ErrorMessage()<< endl;
cout<< "Source = "<< ( LPCTSTR ) bstrSource<< endl;
cout<< "Description = "<< ( LPCTSTR ) bstrDescription<< endl;
}

return 0;
}