开端一(续)

第二周前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.报表>?

原文地址:https://www.cnblogs.com/9421/p/1750658.html