Как создать экземпляр неуправляемого плагина VST C ++ из C # [дубликат]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

3
задан cause4concern 11 January 2014 в 17:27
поделиться

5 ответов

VST.NET не для C ++. Откуда у вас эта идея? Перейдите в код VST.NET и проверьте образцы. Я надеюсь, что это станет понятным.

Надеюсь, это поможет. Марк Автор VST.NET и MIDI.NET

4
ответ дан obiwanjacobi 19 August 2018 в 11:11
поделиться
  • 1
    Я не знаю, где я увидел что-то, что VST.NET было бы непригодным. Либо я думал, что мне нужно использовать старую версию Visual Studio C # .net, либо я видел, как кто-то сказал, что C # слишком медленный, и я должен изучить C ++. – cause4concern 11 January 2014 в 21:29
  • 2
    Это правда, что если вы хотите сделать невероятно быструю ручную оптимизацию сборки со сложными алгоритмами DPS с низким потреблением процессора, вы должны пойти на C ++. Дает вам гораздо больше контроля и меньше накладных расходов, чем .NET. Потому что каждый вызов между хостом и плагином (и наоборот) - это кодовый слой C ++, который гарантирует, что оба мира (управляемые и неуправляемые) могут разговаривать друг с другом. Но для прототипов или более простых (MIDI) плагинов VST.NET обладает гораздо большей производительностью, чем родной C ++ VST (SDK). – obiwanjacobi 12 January 2014 в 10:14

Архитектура плагина VST Штейнберга была долгое время, впервые выпущенная в 1996 году. Конечно, потребуется еще 6 лет, поэтому, конечно, много примеров кода на C ++. VST v3 использует COM, чтобы упростить разработку плагинов на языках, отличных от C ++.

Существует два вида COM, «чистый», основанный на интерфейсе IUnknown. И «практический» вид, основанный на IDispatch, иначе известный как OLE Automation или ActiveX, в наши дни называется Automation, поскольку распознавание имен для «ActiveX» больше не внушает уверенности:)

Язык C # работает очень хорошо с «практическим» видом. Что поддерживает библиотеки типов, формат файла, который описывает типы, реализованные COM-сервером. Очень проста в использовании в программе на C #, вы просто добавляете ссылку на библиотеку типов, и она действует как обычная сборка .NET. VST, однако, используют чистый вид, у вас нет удобной библиотеки типов, доступной для импорта деклараций интерфейса.

Написание плагинов на C # все еще возможно, вам нужно повторно объявить типы интерфейса VST на языке C # или использовать обертку C ++ / CLI для устранения разрыва. Довольно больно, чтобы понять это правильно, но это было сделано раньше. Как в этом проекте с открытым исходным кодом . Или этот . Не знаю, насколько они хороши, а не одобрение. Первая ссылка для VST.NET. Это управляемая оболочка, а не C ++. В любом случае, после компиляции он использует C ++ / CLI, чтобы позаботиться о нативном взаимодействии. Вторая оболочка не совсем пригодна для использования, поскольку для нее требуется SDK Steinberg. Это было прекращено совсем недавно. Разумеется, зловещий знак.

1
ответ дан Hans Passant 19 August 2018 в 11:11
поделиться
  • 1
    VST поставляется в двух вариантах 2.x и 3.x. Последний интерфейс основан, и эти интерфейсы совместимы с COM. Версия 2.x не имеет ничего общего с COM, и это версия, поддерживаемая VST.NET. Многие считают, что 3.x раздуты и заставляют разработчиков работать без особых причин. Не все хосты поддерживают версию VST версии 3.x. – obiwanjacobi 12 January 2014 в 10:11

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

-2
ответ дан madhtr 19 August 2018 в 11:11
поделиться
  • 1
    Можете ли вы привести ссылки, чтобы поддержать ваше мнение? – Brent Washburne 14 March 2015 в 01:14
  • 2
    это причиняет мне боль. Пожалуйста, не путайте оппонента с фактом. Я думаю, что вы пытались сказать то, о чем говорили Мельбурнский разработчик и obionejacobi, поэтому было бы лучше вообще ничего не говорить. – increddibelly 26 April 2016 в 07:31

Я хотел бы второй Obiwanjacobi. Я использую VST.Net в течение нескольких месяцев, и это отлично.

. Конечно, есть аргумент в пользу использования C ++, поскольку он позволяет более тонко контролировать управление ЦП. Но, это миф, чтобы сказать, что код C ++ обязательно быстрее кода C #. C # очень много работает для вас, как управление памятью и так далее. В основном, когда кто-то говорит, что C ++ быстрее, чем C #, они на самом деле не сравнивают яблоки с яблоками. Но, тем не менее, язык - это личный выбор.

Я думал, что добавлю эту ссылку, потому что если вы собираетесь создавать VST, вам понадобятся элементы управления. Вот набор элементов управления в бета-фазе. Они предназначены для VST. Они являются скинами и легкими.

https://bitbucket.org/MelbourneDeveloper/vst-controls-.net

1
ответ дан Melbourne Developer 19 August 2018 в 11:11
поделиться
  1. Если вы работаете с одной конкретной dll, используйте p / invoke для создания оболочки, реализуя функции, подробно описанные в VST SDK.
  2. Если вы используете общий метод для набора VST, создайте смешанный режим ref class wrapper, передающий имя файла в качестве аргумента - вам нужно сделать это на C ++. Этот класс упорядочивает данные между управляемой и неуправляемой памятью.
  3. Поскольку VST3 является последним стандартом VST и совместим с COM, создайте экземпляр с помощью COM. Для некоторых идей см. . Как я могу запустить экземпляр COM-объекта в C # с помощью CLSID?
0
ответ дан Toby Speight 19 August 2018 в 11:11
поделиться
  • 1
    Annnnd, это не ответ, не должен быть размещен как таковой, НО как комментарий, если вы не можете комментировать, тогда попробуйте ответить, когда сможете, с полным и подробным сообщением, так как правильно знать, что вы не помогаете сайту в в любом случае, но поощряя плохое поведение и загрязняя сайт. Если вы хотите поговорить о вещах, связанных с сообществом, идите к мета. Ответы и комментарии здесь не для этого. – xoxel 22 May 2018 в 13:21
  • 2
    просто хочу получить ответ на вопрос, рекомендации для VST.NET - это все, что можно получить, задавая этот конкретный вопрос. Ничего особенного в рекламе. – user 22 May 2018 в 13:30
  • 3
    Тем не менее, он отвечает на вопрос ОП достаточно, чтобы он выбрал «объявление». как правильный ответ на его проблему, а также признание этого в разделе комментариев. Вы здесь не для того, чтобы решить, полезен ли ответ для проблемы OP, и я тоже, мы здесь, чтобы помечать бесполезные ответы, размещенные как таковые не более. Каждая проблема различна, специфична в том или ином виде, если вас не устраивает ответы на этот пост, создайте свой собственный вопрос, так как вам не нужна никакая репутация для этого, и укажите, что вы не хотите использовать VST.NET. – xoxel 22 May 2018 в 13:38
  • 4
    Я создал свой собственный вопрос, и какой-то шутник обозначил его как дубликат. Вот почему мы здесь. VST.NET не для меня, и я до сих пор не отвечаю на вопрос, который я задал. – user 22 May 2018 в 16:30