| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 584 人关注过本帖
标题:组件&C#的问题。。。小弟实在是不无法解决啊,高手看看
只看楼主 加入收藏
nemozhang
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-6
收藏
 问题点数:0 回复次数:0 
组件&C#的问题。。。小弟实在是不无法解决啊,高手看看
小弟我写了一个组件里面有一个关于磁盘寻道的FCFS算法,客户端是C#写的网页,但是在c#调用的时候出现了数组越界访问,可我怎么都看不出来,来论坛求助,请高手看看,指点迷津。。。
客户端的代码:
 protected void Button1_Click(object sender, EventArgs e)
    {
        Os_algClass testclass = new Os_algClass();   //创建组建对象
        for(int a=0;a<System.Convert.ToInt16(TextBox2.Text);a++)  //接受文本框中的数据并调用方法计算
        {
            
            string strText = "传出的数组是", anwFCFS = "",cv="" ;
            int sum_FCFS = 0;
            int[] arrNum = new int[10];
            GetRam(10, 200, 1, ref arrNum);  //getram该函数产生10个范围为0到200的随机数,放在arrNum中
            int[] inFCFS = (int[])testclass.FCFS_P1(0, arrNum, 10, out sum_FCFS);
            for (int i = 0; i < inFCFS.Length; i++)//将传出的数组元素值转换成string
            {
                if (i + 1 < inFCFS.Length)
                {
                    anwFCFS = anwFCFS + inFCFS[i].ToString() + "、";
                }
                else if (i + 1 == inFCFS.Length)
                {
                    anwFCFS = anwFCFS + inFCFS[i].ToString();
                }
            }
            strText = strText + anwFCFS + "\r\n总寻道数是:" + sum_FCFS.ToString() + "\r\n";
            TextBox1.Text = TextBox1.Text+ strText; //结果放在文本框中
        }
    }
组件端的代码:
STDMETHODIMP COs_alg::FCFS_P1(long now, VARIANT ask, long size, long *sum, VARIANT *sequen)
{
    // TODO: Add your implementation code here
    /*  now     存取臂当前位置
    ask     请求序列
    size    是请求的数量
    sum     经过的柱面数
    sequen  访问顺序 */
    
    //定义数组指针
    long *pask;
    //定义下界
    long ask_LBound;
    *sum=0;
    //获取访问权  并得到下界
    SafeArrayAccessData(ask.parray, (void HUGEP **) &pask);    
    SafeArrayGetLBound(ask.parray, 1, &ask_LBound);
    
    vector<long> Vask;
    vector<long> Vsequen;
    
    Vask.push_back(now); //将now放置在向量之首
    // 转换ask数组到Vask向量
    long temp;
    for (temp = 0; temp < size; ++temp)
    {
        Vask.push_back(pask[ask_LBound+temp]);
    }
    
    vector<long>::iterator it;
    
    // 计算经过的柱面数的算法
    for (it=Vask.begin(); it != Vask.end()-1; ++it)
    {
        *sum += abs( *(it+1)-*(it) );
    }

    
    
    // 访问顺序(FIFO顺序与请求顺序相同)
    Vsequen = Vask;
    
    // 转换Vsequen向量至sequen数组
        
    //定义安全数组以及参数
    SAFEARRAYBOUND   saBound[1];
    SAFEARRAY *pSA;
    
    saBound[0].cElements   =  size+1;
    saBound[0].lLbound   =   0;
    
    //创建安全数组 并将指针赋给pSA
    pSA   =   SafeArrayCreate(   VT_I4,   1,   saBound   );
        
    temp = 0;
    for (it=Vask.begin(); it != Vask.end(); ++it)
    {
        //使用API进行赋值
        SafeArrayPutElement(   pSA,   &temp,   &(*it)  );         
        temp++;
    }
    
    //初始化变体
    VariantInit(  sequen   );
    //设定类型
    sequen->vt=VT_I4|VT_ARRAY;
    //数据赋值(当前为指针类型)
    sequen->parray=pSA;
    
    //释放访问权
    SafeArrayUnaccessData(ask.parray);
    
    //释放空间
    SafeArrayDestroy(ask.parray);
    
    return S_OK;
}

[[italic] 本帖最后由 nemozhang 于 2008-1-15 14:15 编辑 [/italic]]
搜索更多相关主题的帖子: 组件 
2008-01-15 14:06
快速回复:组件&C#的问题。。。小弟实在是不无法解决啊,高手看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017383 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved