在VB中调用C#对象 - "对非共享成员的引用需要对象引用。"

时间:2016-03-03 18:40:30

标签: c# vb.net

我收到"对非共享成员的引用需要一个对象引用。"我尝试从VB.net中调用C#中的结构时出错。

我正在写这个VB方面,C#方面以前写过 我在我的解决方案中设置了对C#项目的引用,可以很好地看到C#项目中的所有内容。

我打电话的代码

public ContourPt[] CalcContour(
            double LatDegr,
            double LonDegr,
            int NPts,
            double dBuBaseline,
            double ERP,
            double AntHAMSL,
            WHICHCHART_ENUM WhichChart,
            double AntAz,
            int AntennaId)
        {

            double dBu = dBuBaseline + 9.0 - 10.0 * Math.Log10(ERP / 1000.0);

            if(NPts < MinNPts) throw new ArgumentOutOfRangeException("NPts", NPts, "must be at least "+MinNPts);
            double dAz = 360.0 / (double)NPts;


            LatLonDegr llDegr = new LatLonDegr(LatDegr, LonDegr);
            LatLonSec llSec = llDegr;
            return CalcContour(llSec.LatSecN, llSec.LonSecW, dAz, dBu, AntHAMSL, WhichChart, AntAz, AntennaId);
        }  

我已经尝试了多种调用方法的方法,但我坚持得到同样的错误。但即便是下面的简单片段也无法发挥作用。

Dim np() As ContourPt
np(i) = CalcContour(plat, plon, nPts, ddBu, dERP, dAnthAMSL, WhichChart, dAntAz, iAntId)

感谢您提供的任何帮助。如果我需要提供额外的代码以更好地帮助解决我的问题,请告诉我。

谢谢

2 个答案:

答案 0 :(得分:2)

看起来函数本身需要声明static,因此可以在没有对象引用的情况下调用它。

public static ContourPt[] CalcContour(...)

如果你不能改变它的定义,那么你需要一个任何类的实例。

public class ClassName{ // Is this in the ContourPt class?
    public ContourPt[] CalcContour(...)
}

Dim obj = new ClassName()
Dim np() As ContourPt
np(i) = obj.CalcContour(...)

答案 1 :(得分:0)

有些代码是用C#编写的,有些用VB编写的是无关紧要的 - 它运行时就是IL。

错误只是意味着除非您有对象实例,否则无法调用非共享成员。在使用之前,您需要实例化您想要使用的对象:

   Dim o As New Object
   o.toString()

与调用直接在该类上执行的共享成员相反:

   Convert.toInt16(someValue);