开端一(续)

第二周前3天.

 

 

 

1.登陆画面,和主窗体画面都封装了
2。tuexdo
3.控件使用(均封装在EF里面,实际上只是在原有控件基础上加EF*,然后有添加了一些属性而已)
(1)EFForm---Text对应窗体名称,EFCName类似内容页的表头,EFMsgInfo类似状态栏的信息.包含一个EFButtonBar->对应有F1 - F12,点击出发异常????
(2)EFLabelText是一个lable + textbox ;EFCname对应label的text,EFEnterText对应textbox的text
(3)EFGroupbox对应groupbox
(4)EFGrid
可以在设计窗体列编辑器中绑定列,并定义列标题,类型等.可以通过efGrid1.DataSource=dt设置数据源.也可通过 outBlock.GetBlockVal(efGrid1);
-----------------------------
//压入Block
outBlock = EI.EITuxedo.CallService("ymbw01_f2_inq",inBlock);
outBlock.GetBlockVal(efGrid1);
efGrid1.Cols["stock_type_code"].DataMap = this.stock_status_inq();
efGrid1.AutoSizeCols();
EI.EIInfo.eiinfo_sys syscls=outBlock.GetSys(); //检查返回是否正确

(5)EFPager 分页,  
  this.efPager3.RecordCountPerPage = 10; //每页显示条数
  this.efPager3.TotalRecordCount =32; //共多少条记录
  this.efPager3.CurrPageNo =0;  //当前第几页
  是从第0页开始的,暂时疑问double ppTest = Math.Ceiling(((double) 32) / 10); 这样做对,可为什么显示的总页数总是小1呢?--
  答案::::要先设置每页显示的条数,然后设置总记录数时,自动计算总页数,此时没有每页显示的条数,则默认每页显示20条

 

ExpandedBlockStart.gif 代码

/*  **************************************************************************************
*    Copyright (c)  Corporation 2010 . All Rights Reserved.
*      *******系统
*****************************************************************************************
*  程序名称            : Form4                                                    
*  程序描述            : 测试控件的使用                            
*  备注说明            : 
*  修改历史            : 
*    日期            作者                描述                                                    
*    ----------     --------        ----------------------------------------           
*    2010/607/01     9421            (created)                  
* ***************************************************************************************** 
*/
using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Drawing;
using  System.Windows.Forms;
using  C1.Win.C1FlexGrid;

namespace  TESTFORM
{
    
public   class  Form4 : EF.EFForm
    {
        
#region  参数定义
        
private  EF.EFGrid efGrid1;
        
private  EF.EFLabel efLabel1;
        
private  EF.EFPager efPager3;
        
private  EF.EFButton efButton1;        // 分页
         private  System.ComponentModel.IContainer components  =   null ;
        
#endregion  

        
#region  构造函数
        
public  Form4()
        {
            
//  该调用是 Windows 窗体设计器所必需的。
            InitializeComponent();
            
//  TODO: 在 InitializeComponent 调用后添加任何初始化

            System.Data.DataTable dt 
=   this .getTable();

            
//             this.dataGrid1.DataSource =dt;
            EI.EIInfo outInfo  =   this .getEIInfo();
            
// 绑定efgrid1
            
// this.efGrid1.DataSource = dt;    // 方法一
            outInfo.GetBlockVal( this .efGrid1);
            
// 设置性别的datamap(使1显示男,0显示女)
            efGrid1.Cols[ " sex " ].DataMap  =   this .getHashTable();
            
// 固定前1行,前2列
            efGrid1.Cols.Frozen = 2 ;
            efGrid1.Rows.Frozen
= 1 ;   
            
// 设置efgrid1的公司单元格,单击时显示列表
            efGrid1.Cols[ " company " ].ComboList = " |... " ;

            
// 汇总信息,汇总年龄,显示在数据下方,汇总字样显示在第一列
            efGrid1.Subtotal(AggregateEnum.Clear);
            efGrid1.Tree.Column 
=   2 ;
            efGrid1.SubtotalPosition 
= SubtotalPositionEnum.BelowData ; // .AboveData;

            
// int totalOn = efGrid1.Cols["sex"].Index;
             int  totalOn  =  efGrid1.Cols[ " name " ].Index;
            
int  groupon  =  efGrid1.Cols[ " age " ].Index;

            efGrid1.Subtotal(AggregateEnum.Sum,
0 , - 1 ,totalOn, " 合计 " );
            
            efGrid1.Subtotal(AggregateEnum.Sum,
0 , - 1 ,groupon);

            
// 分页(必须先设置每页显示的条数,默认20)
             this .efPager3.RecordCountPerPage  =   10 // 每页显示条数
             this .efPager3.TotalRecordCount  = 42 // 共多少条记录
            
// this.efPager3.CurrPageNo = 0;   // 当前第几页(默认0,第一页
//             double ppTest = Math.Ceiling(((double) 42) / 10);  // Ceiling大于或等于指定数的最小整数
//             MessageBox.Show(ppTest + "0"+this.efPager3.TotalPageCount);            
        }

        
#endregion

        
#region  清理所有正在使用的资源。
        
///   <summary>
        
///  清理所有正在使用的资源。
        
///   </summary>
         protected   override   void  Dispose(  bool  disposing )
        {
            
if ( disposing )
            {
                
if  (components  !=   null
                {
                    components.Dispose();
                }
            }
            
base .Dispose( disposing );
        }
        
#endregion

        
#region  设计器生成的代码
        
///   <summary>
        
///  设计器支持所需的方法 - 不要使用代码编辑器修改
        
///  此方法的内容。
        
///   </summary>
         private   void  InitializeComponent()
        {
            
this .components  =   new  System.ComponentModel.Container();
            System.Resources.ResourceManager resources 
=   new  System.Resources.ResourceManager( typeof (Form4));
            
this .efGrid1  =   new  EF.EFGrid( this .components);
            
this .efLabel1  =   new  EF.EFLabel();
            
this .efPager3  =   new  EF.EFPager();
            
this .efButton1  =   new  EF.EFButton();
            ((System.ComponentModel.ISupportInitialize)(
this .efGrid1)).BeginInit();
            
this .SuspendLayout();
            
//  
            
//  efGrid1
            
//  
             this .efGrid1.BackColor  =  System.Drawing.SystemColors.Window;
            
this .efGrid1.ColumnInfo  =   @" 11,1,0,0,0,125,Columns:0{Width:29;AllowSorting:False;Name:""grid_head"";DataType:System.Int32;TextAlign:RightCenter;}    1{Width:57;AllowSorting:False;Name:""check_option"";Caption:""选择"";AllowDragging:False;DataType:System.Boolean;TextAlignFixed:CenterCenter;ImageAlign:CenterCenter;}    2{Name:""name"";Caption:""姓名"";}    3{Name:""sex"";Caption:""性别"";}    4{Name:""age"";Caption:""年龄"";DataType:System.Int32;TextAlign:RightCenter;ImageAlign:CenterCenter;}    5{Name:""depart"";Caption:""部门"";ComboList:""|a|v|x|x|e|"";}    6{Name:""company"";Caption:""公司"";ComboList:""|..."";}     " ;
            
this .efGrid1.DrawMode  =  C1.Win.C1FlexGrid.DrawModeEnum.OwnerDraw;
            
this .efGrid1.EFAllowMenu  =   true ;
            
this .efGrid1.EFAllowMenuChoice  =   true ;
            
this .efGrid1.EFAllowMenuChoiceAll  =   true ;
            
this .efGrid1.EFAllowMenuNew  =   true ;
            
this .efGrid1.EFAllowMenuSaveAs  =   true ;
            
this .efGrid1.EFChoiceCount  =   0 ;
            
this .efGrid1.EFCols  =   11 ;
            
this .efGrid1.EFRows  =   2 ;
            
this .efGrid1.EFUserCols  =   10 ;
            
this .efGrid1.EFUserRows  =   1 ;
            
this .efGrid1.ForeColor  =  System.Drawing.SystemColors.WindowText;
            
this .efGrid1.Location  =   new  System.Drawing.Point( 112 64 );
            
this .efGrid1.Name  =   " efGrid1 " ;
            
this .efGrid1.Rows.Count  =   2 ;
            
this .efGrid1.ShowCursor  =   true ;
            
this .efGrid1.Size  =   new  System.Drawing.Size( 592 248 );
            
this .efGrid1.Styles  =   new  C1.Win.C1FlexGrid.CellStyleCollection( @" Fixed{BackColor:Control;ForeColor:ControlText;Border:Flat,1,ControlDark,Both;}    Highlight{BackColor:Highlight;ForeColor:HighlightText;}    Search{BackColor:Highlight;ForeColor:HighlightText;}    Frozen{BackColor:Beige;}    EmptyArea{BackColor:AppWorkspace;Border:Flat,1,ControlDarkDark,Both;}    GrandTotal{BackColor:Black;ForeColor:White;}    Subtotal0{BackColor:ControlDarkDark;ForeColor:White;}    Subtotal1{BackColor:ControlDarkDark;ForeColor:White;}    Subtotal2{BackColor:ControlDarkDark;ForeColor:White;}    Subtotal3{BackColor:ControlDarkDark;ForeColor:White;}    Subtotal4{BackColor:ControlDarkDark;ForeColor:White;}    Subtotal5{BackColor:ControlDarkDark;ForeColor:White;}     " );
            
this .efGrid1.TabIndex  =   3 ;
            
this .efGrid1.CellButtonClick  +=   new  C1.Win.C1FlexGrid.RowColEventHandler( this .efGrid1_CellButtonClick);
            
//  
            
//  efLabel1
            
//  
             this .efLabel1.BackColor  =  System.Drawing.Color.Transparent;
            
this .efLabel1.Location  =   new  System.Drawing.Point( 296 384 );
            
this .efLabel1.Name  =   " efLabel1 " ;
            
this .efLabel1.TabIndex  =   5 ;
            
this .efLabel1.Text  =   " efLabel1 " ;
            
//  
            
//  efPager3
            
//  
             this .efPager3.CurrPageNo  =   1 ;
            
this .efPager3.Location  =   new  System.Drawing.Point( 432 320 );
            
this .efPager3.Name  =   " efPager3 " ;
            
this .efPager3.RecordCountPerPage  =   20 ;
            
this .efPager3.Size  =   new  System.Drawing.Size( 376 24 );
            
this .efPager3.TabIndex  =   6 ;
            
this .efPager3.TotalRecordCount  =   50 ;
            
this .efPager3.PageUpClicked  +=   new  System.EventHandler( this .efPager3_PageUpClicked);
            
this .efPager3.PageBottomClicked  +=   new  System.EventHandler( this .efPager3_PageBottomClicked);
            
this .efPager3.DragEnter  +=   new  System.Windows.Forms.DragEventHandler( this .efPager3_DragEnter);
            
this .efPager3.PageTopClicked  +=   new  System.EventHandler( this .efPager3_PageTopClicked);
            
this .efPager3.PageDownClicked  +=   new  System.EventHandler( this .efPager3_PageDownClicked);
            
//  
            
//  efButton1
            
//  
             this .efButton1.DialogResult  =  System.Windows.Forms.DialogResult.None;
            
this .efButton1.EnabledEx  =   false ;
            
this .efButton1.FnNo  =   0 ;
            
this .efButton1.Font  =   new  System.Drawing.Font( " 宋体 " , 13F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel);
            
this .efButton1.Hint  =   "" ;
            
this .efButton1.Image  =  ((System.Drawing.Image)(resources.GetObject( " efButton1.Image " )));
            
this .efButton1.Location  =   new  System.Drawing.Point( 632 376 );
            
this .efButton1.Name  =   " efButton1 " ;
            
this .efButton1.Size  =   new  System.Drawing.Size( 128 40 );
            
this .efButton1.SizeMode  =  System.Windows.Forms.PictureBoxSizeMode.StretchImage;
            
this .efButton1.TabIndex  =   7 ;
            
this .efButton1.TabStop  =   false ;
            
this .efButton1.Text  =   " efButton1 " ;
            
this .efButton1.Click  +=   new  System.EventHandler( this .efButton1_Click);
            
//  
            
//  Form4
            
//  
             this .AutoScaleBaseSize  =   new  System.Drawing.Size( 6 14 );
            
this .ClientSize  =   new  System.Drawing.Size( 1016 734 );
            
this .Controls.Add( this .efButton1);
            
this .Controls.Add( this .efPager3);
            
this .Controls.Add( this .efLabel1);
            
this .Controls.Add( this .efGrid1);
            
this .Location  =   new  System.Drawing.Point( 0 0 );
            
this .Name  =   " Form4 " ;
            
this .Controls.SetChildIndex( this .efGrid1,  0 );
            
this .Controls.SetChildIndex( this .efLabel1,  0 );
            
this .Controls.SetChildIndex( this .efPager3,  0 );
            
this .Controls.SetChildIndex( this .efButton1,  0 );
            ((System.ComponentModel.ISupportInitialize)(
this .efGrid1)).EndInit();
            
this .ResumeLayout( false );

        }
        
#endregion

        
#region  获取dataTable
        
public  System.Data.DataTable getTable()
        {
            System.Data.DataTable dt 
=   new  System.Data.DataTable();
            
            System.Data.DataColumn dc1 
=   new  System.Data.DataColumn( " name " , typeof ( string ));
            System.Data.DataColumn dc2 
=   new  System.Data.DataColumn( " age " , typeof ( string ));
            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
            
for ( int  i = 1 ;i < 6 ;i ++ )
            {
                System.Data.DataRow dr 
=  dt.NewRow();
     
                dr[
0 ] = " pp " ;
                dr[
1 = " 22 " ;    
                dt.Rows.Add(dr);
            }
            
return  dt;
        }
        
#endregion

        
#region  获取EIInfo
        
public  EI.EIInfo getEIInfo()
        {
            EI.EIInfo outInfo 
=   new  EI.EIInfo();
            outInfo.SetColName(
1 , " name " );
            outInfo.SetColName(
2 , " sex " );
            outInfo.SetColName(
3 , " age " );
            outInfo.SetColName(
4 , " depart " );
            outInfo.SetColName(
5 , " company " );
            
for ( int  i  =   1 ;i < 6 ;i ++ )
            {                
                outInfo.SetColVal(i,
" name " , " sun " + i);
                outInfo.SetColVal(i,
" sex " ,i % 2 == 0 ? 1 : 0 ); 
                outInfo.SetColVal(i,
" age " , "" + i * 3 ); 
                outInfo.SetColVal(i,
" depart " , " depart " + i); 
                outInfo.SetColVal(i,
" company " , " company " + i); 
            }
            
return  outInfo;
        }
        
#endregion

        
#region  获取HashTable
        
public  System.Collections.Hashtable getHashTable()
        {
            System.Collections.Hashtable ht 
=   new  Hashtable();
            ht.Add(
" 1 " , " " );
            ht.Add(
" 0 " , " " );
            
return  ht;
        }
        
#endregion

        
#region  当单击efGrid一个单元格时
        
private   void  efGrid1_CellButtonClick( object  sender, C1.Win.C1FlexGrid.RowColEventArgs e)
        {
            
if ( this .efGrid1.Cols[e.Col].Name  == " company " )
            {
                EI.EIInfo outBlock 
=   this .getEIInfo();
                
int  choice  =  outBlock.GetDropDownChoice(EF.EFFunction.EFGetRectangle(efGrid1,e.Row,e.Col), 30 );
                
if (choice  !=- 1 )
                {
                    
this .efGrid1[e.Row, " company " =  outBlock.GetColVal(choice, " company " );
                }
            }
        }
        
#endregion

        
#region  分页控件事件
        
private   void  efPager3_PageBottomClicked( object  sender, System.EventArgs e)
        {
            
this .efPager3.CurrPageNo  =   this .efPager3.TotalPageCount  - 1 ;
        }
        
private   void  efPager3_PageDownClicked( object  sender, System.EventArgs e)
        {
            
this .efPager3.CurrPageNo  =   this .efPager3.CurrPageNo  +   1 ;
        }
        
private   void  efPager3_PageTopClicked( object  sender, System.EventArgs e)
        {
            
this .efPager3.CurrPageNo  = 0 ;
        }
        
private   void  efPager3_PageUpClicked( object  sender, System.EventArgs e)
        {
            
this .efPager3.CurrPageNo  =   this .efPager3.CurrPageNo  -   1 ;
        }
        
#endregion

        
#region  efbutton按钮事件
        
private   void  efButton1_Click( object  sender, System.EventArgs e)
        {
            MessageBox.Show(
" pageCount: " + this .efPager3.RecordCountPerPage);
        }
        
#endregion
    }
}

 

 

--------------------------------------------------------------------------------------------------
4.数据分发
(1)配置画面ED00 ---
配置前确定所配置的函数已在后台编译通过
新增(功能名,序号,函数名,关键码1必输)->F7生产文件-->系统将生成2个配置文件(edcall_func_map_data.h,edcall_func_map_declare.h)
(*data.h是数据分发中心配置信息映射数据, *declare.h是通过数据分发调用的函数声明文件)
-----完成了前台的配置后,需到后台的ed的目录下编译函数及service--生成的配置问件将在后台编译Ed的函数和service将作为头文件引用
(2)前台调用
EI.EIInfo.eiinfo_ed ed = new EI.EIInfo.eiinfo_ed();
ed.func_name[0] = "PSRS_SELECT_PLANMAT";
ed.pk_name[0] = "WHOLE_BACKLOG_CODE";
ed.pk_val[0] = efComboBox2.Text;
inBlock.SetED(ed);
outBlock = EI.EITuxedo.EDCall(inBlock);

5.字段显示配置
(1)配置画面EDA2----
需要在后台的函数或service事先声明功能的标识.
如:有一个查询service,查询的是表tpsrsd0的所有字段,且该service使用了名功能标示"PSRS01DO_INQ",如果前台使用了对他自定义显示配置,则前台只能看到配置画面左边的字段
(2)使用
要事先把TTA的数据导入TEDA2,TEDA5中.在右边输入查询条件按查询,则显示所有查询出的字段,选中要修改的点击对应的加入,删除修改等

6。报表

-----------------------------------------------------------------------------------------------
7。了解下tuxedo的使用,如何在前台调用后台;

(1).基本操作(调用后台程序)
//定义参数(类似parameter或Dictory)
EI.EIInfo inBlock = new EI.EIInfo();
EI.EIInfo outBlock ; //设置参数值 inBlock.SetColName(1,"whole_block_code");
inBlock.SetColVal(1,1,"Test");
//调用后台方法类wowo_view
outBlock = EI.EITuxedo.CallService("wowo_view",inBlock);

if(outBlock.sys_info.flag != 0)
{//失败;}
str = outBlock.GetColVal(choice,"whole_backlog_code");

(2)a....中间件定义::::中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。
中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。
相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。
执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或 OS 环境。
   b....中间件特点::::: 满足大量应用的需要运行于多种硬件和OS平台支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互支持标准的协议支持标准的接口。   
由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的主要部分。
对于应用软件开发,中间件远比操作系统和网络服务更为重要,中间件提供的程序接口定义了一个相对稳定的高层应用环境,不管底层的计算机硬件和系统软件怎样更新换代,只要将中间件升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而保护了企业在应用软件开发和维护中的重大投资。  
   c...人们一般把Tuxedo作为第一个严格意义上的中间件产品。
  
8。Pro*C
// C 的标准头文件部分
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdarg.h>
//EI头文件
#include "EI_TUXClass.h"

int f_ymbw01_rk(EIClass * bcls_rec, EIClass * bcls_ret)
{
 /*定义函数名*/
 char FunctionEname[31]="";            //定义函数英文名称
 char FunctionCname[201]="";            //定义函数中文名称
 char ProcessName[201]="";              //定义进程名称
 strcpy(FunctionEname,"f_ymbw01_rk");       //赋值函数英文名称-------要修改为对应的
 strcpy(FunctionCname,"材料新增");       //赋值函数中文名称-------要修改为对应的
  /*记录日志*/
 EDLog(1, 1, " **************%s begin*****************",FunctionEname);

 /*程序用变量*/      
 char rtnmsg[20]=" ";   //  -------要修改为对应的

 /*Pro*c 标准头文件部分*/
 EXEC SQL INCLUDE SQLCA;

 /*使用的表结构变量*/
 EXEC SQL INCLUDE tmmem01.h;   //  -------要修改为对应的

 /*在SQL语句中使用的变量*/
 EXEC SQL BEGIN DECLARE SECTION;  
 int  v_count_num = 0;        //  -------要修改为对应的
 
 EXEC SQL END DECLARE SECTION;

 /*设置出错处理*/
 EXEC SQL WHENEVER SQLERROR GOTO l_sqlerror;

 /*设置块名*/
 blkNum = bcls_rec->AtBlkName("MMBWEM99"); //  -------要修改为对应的
 if (blkNum<=0)
 {
  blkNum = bcls_rec->AddBlock();
  bcls_rec->SetBlkName(blkNum, "MMBWEM99");
 }

 /*获得传入参数*/                         //  -------要修改为对应的     
 bcls_rec->GetSYS(&s);
 s.flag=0;
 strcpy(v_ueser,s.userid);
 gettime(datetime);

 /* ------------------ 读取前台 ---------------------------*/
 EDLog(1, 1,"读取前台");               //  -------要修改为对应的
  
    bcls_rec->GetColVal("YMBWRK", 1, "mat_no", v_mat_no);             //材料号
    bcls_rec->GetColVal("YMBWRK", 1, "mat_kind", v_mat_kind);             //材料类型

 EDLog(1, 1, "材料号= [%s],材料类型= [%s]",v_mat_no,v_mat_kind);

/*----------------逻辑处理----------------*///  -------要修改为对应的

 exec sql         
  select count(*)
  into :v_count
  from tymbw33
  where stock_no=:v_stock_code and stock_place_no=:v_pile_no;
 
 if(v_count==0)
 {
  sprintf(s.msg,"库区%s垛位%s不存在,入库失败",v_stock_code,v_pile_no);
  s.flag = -1;
  goto l_apperror;
 }
 
/*--------------------处理结果跳转到--------------------*///  -------要修改为对应的 
l_sqlerror:
 /*设置系统返回参数*/
 s.flag    = -1;
 s.sqlcode = sqlca.sqlcode;                      //返回SQLCODE
 strcpy(s.sqlmes,sqlca.sqlerrm.sqlerrmc);        //返回SQLMSG
 EDLog(1,1,"sqlca.sqlcode=[%d]",s.sqlcode);
 if( sqlca.sqlcode == 1403 )
  strcpy(s.msg,"找不到数据!");
 else if( sqlca.sqlcode == -1405 )
  strcpy(s.msg,"当前表找不到数据!");
 else if( sqlca.sqlcode == -1 )
  strcpy(s.msg,"主键重复!");
 else if( sqlca.sqlcode == -1438 )
  strcpy(s.msg,"数据类型或长度错误!");
 else if( sqlca.sqlcode == -1722 )
  strcpy(s.msg,"无效的数据");
 else if( sqlca.sqlcode == -1480 )
  strcpy(s.msg,"字符串超长!");
 else
  strcpy(s.msg,"数据库操作错误!");
 goto l_return;

l_apperror:
 /*设置用户返回参数*/
 s.flag    = -1;
  strcpy(s.msg," 操作失败! ");          //返回信息
 goto l_return;

l_suberror:
 /*设置系统返回参数*/
 EDLog(1,1,"进入了1_suberror,");
 s.flag    = -1;
 bcls_ret->GetSYS(&s);
 strcpy(ProcessName,"");
 goto l_return;

l_return:
 doFlag    =s.flag ;
 bcls_ret->SetSYS(s);
 EDLog(1, 1, "doFlag=[%d]",doFlag);
 EDLog(1, 1, "S.MSG=[%s]",s.msg);
 EDLog(1, 1, "S.SQLCODE=[%d]",s.sqlcode);
 EDLog(1, 1, "S.SQLMES=[%s]",s.sqlmes);
 EDLog(1,1,"--------调用f_ymbw01_rk结束-------");
 return doFlag;
}
(2)说明整体结构是c语言(或说C++),加入了sql语句EXEC开头,sql中用到的参数要在EXEC SQL BEGIN DECLARE SECTION;   下定义;
对于直接和数据库交互的表结构,将由辅助工具自动生成,以EXEC SQL INCLUDE tmmem01.h;引入.


9.
String不可变,每次赋值都会产生新的对象,浪费内存.如:String a="String"会为a分配一个内存区域存放字符串"String"
而a=a+“String2”这时候不是在原有的那个内存区域上改变,而是会产生一块新的内存区域,赋值给a。这才是改变的本质。
StringBuffer为可变,每次改变对象内容不会产生新的对象,不浪费内存

10。
DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。 DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。
(1) 应用如:(用 DllImport 属性修饰的方法必须具有 extern 修饰符|||需要在程序声明中使用System.Runtime.InteropServices命名空)
[DllImport("libwsc", SetLastError=true)]
public static extern int tpacall([MarshalAs(UnmanagedType.LPStr)] string svc, IntPtr idata, int ilen, int flags);
 (2)DllImport会按照顺序自动去寻找的地方: 1、exe所在目录 2、System32目录 3、环境变量目录所以只需要你把引用的DLL 拷贝到这三个目录下 就可以不用写路径了 .
 (3)一般可以认为:非托管代码主要是基于win 32平台开发的DLL,activeX的组件,托管代码是基于.net平台开发的。
 C#对于托管的很好办,直接被使用的需要引用,间接使用的需要拷贝到bin目录下...对于非托管的dll,你拷贝到bin没有任何帮助,因为CLR会把文件拷贝到一个临时目录下,然后
在那运行web,而CLR只会拷贝托管文件,这就是为什么我们明明把非托管的dll放在了bin下却依然提示不能加载模块了. 需要使用DllImport

11.
public static extern int tpacall([MarshalAs(UnmanagedType.LPStr)] string svc, IntPtr idata, int ilen, int flags);
a.MarshalAs:MarshalAs属性指示如何在托管代码和非托管代码之间封送数据。当 MarshalAsAttribute.Value 设置为 ByValArray 时,必须设置 SizeConst 以指示数组中的元素数。当需要区分字符串类型时,ArraySubType 字段可以选择包含数组元素的 UnmanagedType。此 UnmanagedType 只可用于作为结构中的字段的数组。而SizeConst则是指数组中的元素个数。
b.UnmanagedType::::MarshalAsAttribute 属性提供了若干个 UnmanagedType 枚举值,以便将字符串封送到 COM 接口。
  UnmanagedType.BStr(默认)
       具有预设长度和 Unicode 字符的 COM 样式的 BSTR。
  UnmanagedType.LPStr
       指向 ANSI 字符的空终止数组的指针。
  UnmanagedType.LPWStr
       指向 Unicode 字符的空终止数组的指针。
 
12..
ATMI,Application-to-Transaction Monitor Interface,即“应用事务监视接口”,是TUXEDO系统的编程接口。他实现了X/Open组织定义的分布式事务处理(DTP)模型,为应用程序提供命名、通信、队列、事务和缓冲区管理等基础服务。

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=zxc)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcalDB)))

13..C# 修改注册表,,调用其他语言的dll
14.报表>?

转载于:https://www.cnblogs.com/9421/archive/2010/06/03/1750658.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值