Используйте класс C ++ из C # - PullRequest
1 голос
/ 13 января 2009

Хорошо, у меня есть класс захвата изображений C ++. Мне было интересно, смогу ли я получить какую-то помощь ... Я знаю базовый C ++ (я сделал одно введение в класс c и одно введение в класс c ++) и не знаю, как это сделать:

Мне нужно использовать этот класс (т.е. создать новый проект c ++ в моем решении) и использовать c # для ссылки на него и использовать его для сохранения снимка экрана.

Когда я пытаюсь добавить новый проект, я не знаю, какой из них выбрать (win32, mfc, atl, clr, abc, xyz и т. Д.).

Класс захвата изображения находится здесь: http://pastebin.com/m72414ab

Я не знаю, нужно ли мне создавать .h файлы или просто .cpp файл подойдет ... как, если честно, я понятия не имею, с чего начать lol. Я ищу решение, но я хочу учиться в процессе, поэтому мне не нужно спрашивать в следующий раз (не говоря уже о том, что мне нравится c ++, поэтому я собираюсь продолжить с ним кодирование)

Ответы [ 3 ]

11 голосов
/ 13 января 2009

Вы не можете легко использовать классы C ++ из C #, не зная некоторой специализированной информации о C ++ / CLI - либо переписать свой класс C ++ в C и использовать P / Invoke, либо найти полностью C # решение.

Но я бы хотел использовать этот класс c ++ для скорости и памяти.

Я подвергаю сомнению это, если вы не снимаете изображения тысячи раз в секунду, выбор C ++ не принесет никакой пользы, и это сделает вашу программу намного более сложной. Придерживайтесь C # до тех пор, пока вы не узнаете , что вам нужно небольшое повышение производительности.

3 голосов
/ 13 января 2009

.NET версии 2.0 и выше включает метод CopyFromScreen для объекта Graphics. Вы можете создать изображение, получить для этого поверхность для рисования (Графика), а затем скопировать с экрана в изображение.

Вскоре Googling создал простое учебное пособие , которое демонстрирует это с помощью Visual Basic .NET, хотя портировать его на C # тривиально.

Это решение приводит к тем же вызовам GDI +, которые использует ваша версия C ++, с преимуществом отсутствия необходимости ссылаться во внешнем коде C ++ (что, как упоминалось выше, не так просто).

0 голосов
/ 13 января 2009

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

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