大家好,我现在遇到一个问题,在c#中使用了vb中的一个ocx,在vb中的函数原型为Function VerFinger(byval regTemplate, verTemplate, AdoLearning As Boolean, byval AregFeatureChanged As Boolean) As Boolean
在c#转为 VerFinger(ref object,object,bool,ref bool),我在调用的时候老是提示"Invalid argument",谢谢大家指导.

解决方案 »

  1.   

    代码:
    object reg_fg_tmp=ds.tables[0].Rows[0][0];//获取注册模板
    object cap_fg_tmp=axZKFPEngX1.GetTemplate();//获取当前指纹模板,axZKFPEngX1为指纹控件
    bool IsChanged=false;
    if(axZKFPEngX1.VerFinger(ref reg_fg_tmp,cap_fg_tmp,false,ref IsChanged))
    {
     MessageBox.Show("比对通过");}
    elseMessageBox.Show("比对失败");
      

  2.   

    VerFinger(ref object,object,bool,ref bool) 这样难道能通过编译?
      

  3.   

    编译通过,执行时提示invalid argument
      

  4.   

    你那方法VerFinger方法体是什么?
    这样能看出个abc呀?
      

  5.   

    Function VerFinger(byval regTemplate, verTemplate, AdoLearning As Boolean, byval AregFeatureChanged As Boolean) As Boolean
    比对两枚指纹的特征模版是否匹配。其中regTemplate表示指纹登记特征模版,verTemplate表示现场采集的指纹验证特征模版,AdoLearning表示是否进行指纹特征模版学习更新。AregFeatureChanged表示登记模版regTemplate是否改变,两枚指纹匹配时返回 True,不匹配时返回 False
      

  6.   

    这个方法是com组件中的,我们看不到的
      

  7.   

    你把VerFinger这个具体函数贴出来
      

  8.   


    vb 中的byval 是值传递,怎么转变成c#代码的时候,成了ref 地址传递了??
    正确的转换是否为: VerFinger( object,ref object,ref bool, bool)
      

  9.   

    你这个原型里面的参数
    VerFinger(ref reg_fg_tmp,cap_fg_tmp,false,ref IsChanged)) 
    你调用的时候你怎么知道是regTemplate 是ByRef的?况且你先前说函数原型中
    在vb中的函数原型为Function VerFinger(byval regTemplate, verTemplate, AdoLearning As Boolean, byval AregFeatureChanged As Boolean) As Boolean 
    并不是ByRef型~~~???
      

  10.   

    谢谢楼上的,但是我使用VerFinger( object,ref object,ref bool, bool) 是编译不通过的,并且VerFinger(ref object,object,bool,ref bool) c#自动识别过来的,
      

  11.   

    据我所知:1、VB的ByVal是指值传递,而C#的ref是指引用传递(C#默认为值传递)。
    2、C#中bool 与 Boolean 是有区别的。不知道vb中应该对应哪种?
      

  12.   

    首先类都是引用专递,不管你用不用ref,ref是对值类型使用
    如果是ocx控件的话,一般注册后到.net都能看到该类的公开函数,到对象浏览器去看看