zoukankan      html  css  js  c++  java
  • 开端一(续)

    第二周前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条

    代码

    /* **************************************************************************************
    *    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(11264);
                
    this.efGrid1.Name = "efGrid1";
                
    this.efGrid1.Rows.Count = 2;
                
    this.efGrid1.ShowCursor = true;
                
    this.efGrid1.Size = new System.Drawing.Size(592248);
                
    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(296384);
                
    this.efLabel1.Name = "efLabel1";
                
    this.efLabel1.TabIndex = 5;
                
    this.efLabel1.Text = "efLabel1";
                
    // 
                
    // efPager3
                
    // 
                this.efPager3.CurrPageNo = 1;
                
    this.efPager3.Location = new System.Drawing.Point(432320);
                
    this.efPager3.Name = "efPager3";
                
    this.efPager3.RecordCountPerPage = 20;
                
    this.efPager3.Size = new System.Drawing.Size(37624);
                
    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(632376);
                
    this.efButton1.Name = "efButton1";
                
    this.efButton1.Size = new System.Drawing.Size(12840);
                
    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(614);
                
    this.ClientSize = new System.Drawing.Size(1016734);
                
    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(00);
                
    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.报表>?

  • 相关阅读:
    P2590 [ZJOI2008]树的统计(树链剖分)
    P4315 月下“毛景树”(树链剖分)
    P4092 [HEOI2016/TJOI2016]树(树链剖分+倍增LCA)(直接暴力好像最快)
    P4427 [BJOI2018]求和(倍增LCA、树链剖分)
    P3128 [USACO15DEC]Max Flow P(树链剖分)
    P3038 [USACO11DEC]Grass Planting G(树链剖分)
    高精度运算模板
    利用伪元素(:after)来清除浮动和画三角形
    什么是 daemon 与服务 (service)
    数据库系统简介
  • 原文地址:https://www.cnblogs.com/9421/p/1750658.html
Copyright © 2011-2022 走看看