我收到"对非共享成员的引用需要一个对象引用。"我尝试从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)
感谢您提供的任何帮助。如果我需要提供额外的代码以更好地帮助解决我的问题,请告诉我。
谢谢
答案 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);