我熟悉C ++,目前正在尝试学习一些C#。 话虽如此,我还有4行代码。
[DllImport(@"Graphics.dll")]
public static extern vec2 operator * (vec2 a);
[DllImport(@"Graphics.dll")]
public static extern vec2 operator / (vec2 a);
[DllImport(@"Graphics.dll")]
public static extern vec3 operator * (vec3 a);
[DllImport(@"Graphics.dll")]
public static extern vec3 operator / (vec3 a);
在VCS Express中,他们给出了错误Overloadable unary operator expected
,其中*
和/
带有下划线。根据{{3}},两者都可以超载。虽然两个运算符都列在二进制下,而不是一元。发生了什么事?
只是为了完成,这是整个类,就像我正在包装的DLL一样:
class GraphicsDLL
{
public struct vec2
{
float x, y;
[DllImport(@"Graphics.dll")]
vec2();
[DllImport(@"Graphics.dll")]
vec2(float ax, float ay);
[DllImport(@"Graphics.dll")]
public static extern vec2 operator + (vec2 a);
[DllImport(@"Graphics.dll")]
public static extern vec2 operator - (vec2 a);
[DllImport(@"Graphics.dll")]
public static extern vec2 operator * (vec2 a);
[DllImport(@"Graphics.dll")]
public static extern vec2 operator / (vec2 a);
};
public struct vec3
{
float x, y, z;
[DllImport(@"Graphics.dll")]
vec3();
[DllImport(@"Graphics.dll")]
vec3(float ax, float ay, float az);
[DllImport(@"Graphics.dll")]
public static extern vec3 operator + (vec3 a);
[DllImport(@"Graphics.dll")]
public static extern vec3 operator - (vec3 a);
[DllImport(@"Graphics.dll")]
public static extern vec3 operator * (vec3 a);
[DllImport(@"Graphics.dll")]
public static extern vec3 operator / (vec3 a);
};
};
答案 0 :(得分:3)
在C#中,*
和/
只能作为二元运算符重载。它们不能以一元形式重载,因此您会收到该错误。 +
和-
版本可以正常工作,因为您正在重载一元版本而不是二元版本(加法,减法)。
可以使用运算符的二进制形式
来修复此错误 [DllImport(@"Graphics.dll")]
public static extern vec2 operator * (vec2 a, vec2 other);
[DllImport(@"Graphics.dll")]
public static extern vec2 operator / (vec2 a, vec2 other);
我怀疑即使这个代码在执行时也不适合你。看起来您正试图通过此处的签名直接将PInvoke引入C ++成员。如果是这样就行不通。您需要定义一个简单的C入口点,该入口点调用C ++代码并将PInvoke调用到该函数中。