Создание библиотеки DLL, которую можно использовать в собственных и управляемых приложениях

0

Даже после поиска я не мог найти ясного ответа на это. Это, по-видимому, несколько необычная проблема:

У меня есть встроенная реализация, которая должна идти в DLL. Эта DLL должна использоваться как для собственных приложений, так и для управляемых приложений.

Поэтому, если я напишу эту DLL в C++/CLI, я могу разоблачить две вещи:

  1. Плоский, экспортированный в стиле C интерфейс функций, которые могут использоваться родными приложениями.
  2. Управляемый класс, который может использоваться из любого управляемого приложения (например, С#), ссылаясь на эту DLL

Будет ли это работать? Смогут ли обычные нативные приложения загрузить эту DLL и вызвать открытые функции?

  • 1
    Да, это одна из причин существования C ++ / CLI - это вовсе не «редкость», мы делаем это постоянно. MSDN очень ясно на эту тему
  • 1
    COM-компоненты могут вызываться из собственного и управляемого кода; это еще одна альтернатива.
Показать ещё 2 комментария
Теги:
c++-cli
native
managed

1 ответ

0

Собственная DLL скомпилирована как обычная собственная DLL (no/clr). Вызывающий C++/CLI-приложение /DLL использует класс C++ для загрузки DLL через LoadLibrary и GetProcAdress. Вам нужно, чтобы класс C++ отображал все функции родной DLL. Класс C++ действует как прокси-класс:

Пример:

Родная DLL hasa функция foo().

C++/CLI-код предоставляет метод foo, который выглядит так:

void MyProxy::foo() {
    m_foo(); // m_foo is a function pointer to foo() in the DLL obtained via GetProcAddress.
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню