Как я называю C++ / CLI (.NET) DLLs из стандартных, неуправляемых приложений non-.NET?

В неуправляемом мире я смог записать __ declspec (dllexport) или, альтернативно, использовать.DEF файл для представления функции, чтобы смочь назвать DLL. (Из-за искажения имени в C++ для __ stdcall, я поместил псевдонимы в.DEF файл, таким образом, определенные приложения могли снова использовать определенные экспортируемые функции DLL.) Теперь, я интересуюсь способностью выставить единственную функцию точки входа от блока.NET неуправляемым видом, но иметь его вводят в функции стиля.NET в DLL. Действительно ли это возможно простым и простым способом?

То, что я имею, является сторонней программой, которую я расширил через DLLs (плагины), которые реализуют некоторую сложную математику. Однако сторонняя программа не имеет никаких средств для меня визуализировать вычисления. Я хочу так или иначе взять эти предзаписанные математические функции, скомпилировать их в отдельный DLL (но использующий C++ / CLI в.NET), но затем добавить рычаги к функциям, таким образом, я могу представить то, что продолжается под капотом в пользовательском элементе управления.NET. Я не уверен, как смешать материал.NET с неуправляемым материалом, или что к Google для выполнения этой задачи.

Определенные предложения относительно управляемого/неуправляемого моста или альтернативные методы для выполнения рендеринга таким образом, который я описал, были бы полезны.Спасибо.

8
задан Hans Passant 17 May 2010 в 21:46
поделиться

3 ответа

Используете ли вы C ++ / CLI, потому что хотите или потому, что думаете, что вам нужно экспортировать функции?

В случае последнего, посмотрите мой неуправляемый экспорт , который позволяет объявлять неуправляемый экспорт в C # аналогично тому, как работает DllImport.

internal class Sample
{
  [DllExport("_export_test", CallingConvention.Cdecl)]
  static int Test(int a)
  {
     return a + 1;
  }
}
4
ответ дан 5 December 2019 в 15:20
поделиться

Эта статья CodeProject довольно хорошо объясняет процесс.

Использование управляемого кода в неуправляемом приложении
http://www.codeproject.com/KB/mcpp/ijw_unmanaged.aspx

См. Также здесь и здесь .

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

Что ж, компилятор C ++ / CLI делает это довольно просто. Просто напишите статическую управляемую функцию и присвойте ей атрибут __declspec (dllexport). Компилятор вставляет заглушку, которая автоматически загружает среду CLR для выполнения управляемого кода.

Это удобный подход, он не очень расширяемый и не очень быстрый. Следующим шагом будет написание класса ссылки с атрибутом [ComVisible (true)]. После регистрации в Regasm.exe любой неуправляемый клиент с поддержкой COM может использовать этот сервер. Самостоятельное размещение среды CLR (CorBindToRuntimeEx) обычно является последним, но наиболее универсальным вариантом.


Пример кода:

ref class ManagedClass {
public:
  static void StaticFunc() {}
};

extern "C" __declspec(dllexport)
void __stdcall UnmanagedFunc() {
  ManagedClass::StaticFunc();
}
4
ответ дан 5 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

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