Пользование библиотекой C++ в c#

Такая задержка вполне ожидаема. Пропуск простого факта, что Spark не предназначен для использования непосредственно встроенным в интерактивное приложение (и не подходит для запросов в реальном времени), приводит к значительным издержкам

  • Инициализация контекста.
  • Получение ресурсов от менеджера кластера.
  • Извлечение метаданных из Кассандры.

Вопрос в том, имеет ли смысл вообще использовать Spark здесь - если вам нужен отклик в режиме реального времени, и вы собираете полные результаты для драйвера, используя собственный разъем Cassandra , будет намного лучший выбор.

Однако, если вы планируете выполнять логику, которая не поддерживается самой Cassandra, тогда все, что вы можете сделать, это принять стоимость такой косвенной архитектуры.

11
задан Prashant Cholachagudda 21 April 2009 в 11:07
поделиться

5 ответов

Если это «нормальная» DLL (не COM, не управляемая C ++), вы не можете добавить такую ​​ссылку. Вы должны добавить подписи p / invoke (определения внешних статических методов) для экспортов, которые вы хотите вызвать в вашей DLL.

18
ответ дан 3 December 2019 в 03:05
поделиться

Если это простая библиотека C ++, то ссылаться на нее таким способом невозможно.

У вас есть два варианта Вы можете скомпилировать библиотеку C ++ как сборку и представить неуправляемый код с помощью оболочки C ++ / CLI.

-or-

Вы можете использовать некоторые вызовы p / invoke, если библиотека предоставляет свои функциональные возможности через C API.

Не могли бы вы немного расширить вопрос, чтобы включить некоторые подробности о том, как вы обычно вызываете imaging.dll из c ++?

5
ответ дан 3 December 2019 в 03:05
поделиться

если это неуправляемая dll, вы не можете добавить ссылку на нее. Вы должны вызвать его с помощью pinvoke или чего-то подобного:

public classFoo

{

[DllImport("myunmanaged.dll", CharSet = CharSet.Ansi)]

private extern static int UnmanagedFunction(int type, int dest);

}

Если вы хотите преобразовать его в управляемый dll, посмотрите здесь: http://msdn.microsoft.com/en-us/library/aa446538.aspx

Если вы хотите узнать больше о pinvoke и dllimport, посмотрите здесь: http://msdn.microsoft.com/en-us/library/aa288468.aspx

Ура

3
ответ дан 3 December 2019 в 03:05
поделиться

Соглашение о вызовах и различие моделей памяти между управляемым кодом (C #) и неуправляемым кодом (WIn32 C ++) делают их несовместимыми.

Однако .NET включает технологию моста для объектов COM, так что, если вы представляете себе DLL-файл как COM-объект, его можно заставить работать. Это, однако, очевидно, не COM-объект.

2
ответ дан 3 December 2019 в 03:05
поделиться

Если это чистая C ++ DLL, куда вы экспортируете только C-совместимые функции, затем вы можете использовать P / Invoke для использования этих функций. Если вы превратите эту C ++ DLL в COM DLL с библиотекой типов, использовать ее будет еще проще: вы можете импортировать библиотеку типов в оболочки .NET и .NET (называемые оболочечными оболочками времени выполнения).

1
ответ дан 3 December 2019 в 03:05
поделиться
Другие вопросы по тегам:

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