【发布时间】:2019-06-04 21:06:07
【问题描述】:
如何将这段 VB6 代码转换为 C#?
我自己尝试过,到目前为止:
编辑:我要翻译的代码存在于此处: http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx
【问题讨论】:
如何将这段 VB6 代码转换为 C#?
我自己尝试过,到目前为止:
编辑:我要翻译的代码存在于此处: http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx
【问题讨论】:
您还没有显示EventThief 代码,这确实让人无法分辨。但总的来说:
With expression
.Foo = a
.Bar = b
End With
会翻译成
var x = expression;
x.Foo = a;
x.Bar = b;
(当然你可以明确指定类型...)
这里的共同点是expression 只被评估一次。在您展示的特定代码中,当然不需要额外的变量,因为表达式首先只是局部变量。
您的实际错误看起来只是与 EventThief.RIGHT_DOWN 等的类型有关,而不是与 WITH 语句有关。
编辑:好的,您现在已经展示了 确实 使用布尔值的原始 EventThief 代码...但是您还没有展示您的 ported EventThief 代码。你写道:
它说 et.LEFT_UP 很短
...但它不应该是。原来是Boolean,那为什么你的端口是short呢?
【讨论】:
VB中的以下内容
With EventStealingInfo
.RIGHT_DOWN = True
.RIGHT_UP = True
End With
大致可以翻译成
var EventStealingInfo = new EventThief(){
RIGHT_DOWN = true,
RIGHT_UP = true
};
其中RIGHT_UP 和RIGHT_DOWN 是EventStealingInfo 类中的公共属性。
这个结构在 C# 中被称为Object Initializer。
【讨论】:
像这样
With EventStealingInfo
.RIGHT_DOWN = True
.RIGHT_UP = True
End With
变成
EventStealingInfo.RIGHT_DOWN = true;
EventStealingInfo.RIGHT_UP = true;
【讨论】:
我认为你可以走的更近:
EventThief EventStealingInfo = new EventThief()
{
RIGHT_DOWN = true,
RIGHT_UP = true
};
【讨论】:
... = new EventThief())。对象初始化器可能是最接近 Visual Basic 的 With 语句的东西。
我可以致电您的提案选项 A。
我可以推荐选项 B 和选项 C,我认为这会更容易吗?
选项 B
1. 以Microsoft's C# code 开头,用于处理 Windows 挂钩。
2. 根据需要调整它,查看哪些 API 调用了VB6 code makes。
选项 C
1. 从community code获取内置的VB6 DLL。
2. 通过Interop 从新的 C# 应用程序调用该 DLL。
【讨论】:
据我所知,在 C# 中没有与 With 等效的功能,当引用其成员函数/属性时,您需要显式列出该对象。
【讨论】:
没有 C# 等价物。
【讨论】:
你不能把 LEFT_UP 的类型改成 bool 吗?
查看您的代码和您使用 EventThief 的方式,您可能希望使用标志枚举,以便您可以设置各个位,然后进行按位比较。
【讨论】:
“with”关键字只是在设置多个属性时节省重新键入变量名称的快捷方式。 C# 中没有等价物。
即使您仍然会遇到一个问题,即您显然试图将布尔值分配给短数据类型。
EventThief 类中有什么?您可以简单地将 LEFT_UP 字段设为布尔值吗?
【讨论】: