C# и VB6: Как преобразовать 'с' оператором в C#?

Как я могу преобразовать эту часть кода VB6 в C#?

http://pastebin.com/f16e19351

Я попробовал самостоятельно и добрался до сих пор до:

http://pastebin.com/f7ca199f0

Править: Код, который я пытаюсь перевести, существует здесь: http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx

6
задан Zolomon 15 January 2010 в 12:06
поделиться

9 ответов

Вы не показали , что код , что делает невозможным сказать, действительно. Но в целом:

With expression
   .Foo = a
   .Bar = b
End With

будет переводиться на

var x = expression;
x.Foo = a;
x.Bar = b;

(конечно, вы можете указать тип явно ...)

Общность здесь состоит в том, что выражение только один раз оценивается. В конкретном конкретном коде вы показали, что нет необходимости в дополнительной переменной, конечно, поскольку выражение только локальная переменная в первую очередь.

Ваша фактическая ошибка выглядит так, будто она просто связана с типами Eventththief.right_down etc, а не с оператором с оператором.

Отредактируйте: Хорошо, вы теперь показали оригинальный код события, который использует Booleans ... Но вы не показали портированных , что код . Вы писали:

Это говорит, что et.left_up - это короткий

... Но это не должно быть. В оригинале это Boolean , так почему же он короткий в вашем порту?

7
ответ дан 8 December 2019 в 16:03
поделиться

Следующее в VB

With EventStealingInfo
    .RIGHT_DOWN = True
    .RIGHT_UP = True
End With

может быть примерно переведено на

var EventStealingInfo = new EventThief(){
    RIGHT_DOWN = true,
    RIGHT_UP = true
};

где right_up и PROVER_DOWN являются общедоступными свойствами в EventStealingInfo класс.

Эта конструкция в C # известна как инициализатор объекта .

4
ответ дан 8 December 2019 в 16:03
поделиться
-

Я думаю, что это ближе, вы можете пойти:

EventThief EventStealingInfo = new EventThief()
{
    RIGHT_DOWN = true,
    RIGHT_UP = true
};
1
ответ дан 8 December 2019 в 16:03
поделиться

Могу ли я назвать ваше предложение Вариант А.

  1. Возьмите код сообщества VB6, который создает DLL для работы с крюками Windows.
  2. Переведите это на C#

Могу ли я предложить вариант B и вариант C, который, на мой взгляд, будет проще?

Вариант B
1. Начните с кода C# от Microsoft для работы с Windows hooks.
2. Адаптируйте его по мере необходимости, посмотрев, что API называет кодом VB6.

Вариант C
1. Возьмем собранный VB6 DLL из кода сообщества .
2. Вызовите эту DLL из вашего нового приложения на C# через Интерп.

1
ответ дан 8 December 2019 в 16:03
поделиться

Не существует эквивалента с в C #, насколько я знаю, и вам нужно явно перечислите объект при упомянутых его функциях / свойствах.

0
ответ дан 8 December 2019 в 16:03
поделиться

Нет эквивалента C #.

0
ответ дан 8 December 2019 в 16:03
поделиться

Разве вы не можете просто изменить тип левой_уп, чтобы быть Bool?

Глядя на ваш код и то, как вы используете событие, вы можете использовать перечисление флага, чтобы вы могли установить отдельные биты и Тогда делайте побитовые сравнения.

0
ответ дан 8 December 2019 в 16:03
поделиться

Отсутствует прямая замена. Эта запись в блоге описывает, как выполнить эквивалентное действие, определяя последнюю фиксацию, затем определяя хэш для файла в этой фиксации, а затем выгружая его.

git log ...
git ls-tree ...
git show -p ...

(запись блога содержит опечатки и использует вышеуказанное с командой svn )

-121--811250-

На самом деле это не ошибка. Это проблема с изменениями версий собственного проекта! Поскольку в конечном прогоне не используются исходные импортированные ссылки при компиляции!

Например, я создавал сервер чата, клиент. Я использовал структуру пакетов для передачи данных о клиентском проекте. Затем импортирована та же ссылка на серверный проект.

При вызове Packet packet = (Packet) bineyFormatter.Deserialize (stream); У меня та же ошибка. Поскольку фактическая выполняемая ссылка в серверном проекте не является ссылкой сейчас в клиентском проекте! Потому что я перестраивал клиентский проект много раз после!

При создании < new object > = (< new object >) < old object > новый объект всегда должен быть более новой или такой же версией, как старый объект!

Поэтому я построил отдельный проект для создания DLL для класса Packet и импортировал файл DLL в оба проекта.

При изменении класса Packet необходимо снова импортировать ссылку как на клиент, так и на сервер.

Тогда кастинг не даст вышеуказанного исключения!

-121--4245478-

Ключевое слово «with» является просто ярлыком для сохранения повторного ввода имени переменной при установке нескольких свойств. Эквивалент в C # отсутствует.

Даже если бы у вас была проблема, вы, очевидно, пытаетесь назначить логическое значение короткому типу данных.

Что такое в классе EventThief? Можете ли вы просто сделать LEFT_UP поля логическими?

0
ответ дан 8 December 2019 в 16:03
поделиться

Вроде так

With EventStealingInfo
    .RIGHT_DOWN = True
    .RIGHT_UP = True
End With

становится

EventStealingInfo.RIGHT_DOWN = true;
EventStealingInfo.RIGHT_UP = true;
2
ответ дан 8 December 2019 в 16:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: