В неуправляемом мире я смог записать __ declspec (dllexport) или, альтернативно, использовать.DEF файл для представления функции, чтобы смочь назвать DLL. (Из-за искажения имени в C++ для __ stdcall, я поместил псевдонимы в.DEF файл, таким образом, определенные приложения могли снова использовать определенные экспортируемые функции DLL.) Теперь, я интересуюсь способностью выставить единственную функцию точки входа от блока.NET неуправляемым видом, но иметь его вводят в функции стиля.NET в DLL. Действительно ли это возможно простым и простым способом?
То, что я имею, является сторонней программой, которую я расширил через DLLs (плагины), которые реализуют некоторую сложную математику. Однако сторонняя программа не имеет никаких средств для меня визуализировать вычисления. Я хочу так или иначе взять эти предзаписанные математические функции, скомпилировать их в отдельный DLL (но использующий C++ / CLI в.NET), но затем добавить рычаги к функциям, таким образом, я могу представить то, что продолжается под капотом в пользовательском элементе управления.NET. Я не уверен, как смешать материал.NET с неуправляемым материалом, или что к Google для выполнения этой задачи.
Определенные предложения относительно управляемого/неуправляемого моста или альтернативные методы для выполнения рендеринга таким образом, который я описал, были бы полезны.Спасибо.
Используете ли вы C ++ / CLI, потому что хотите или потому, что думаете, что вам нужно экспортировать функции?
В случае последнего, посмотрите мой неуправляемый экспорт , который позволяет объявлять неуправляемый экспорт в C # аналогично тому, как работает DllImport.
internal class Sample
{
[DllExport("_export_test", CallingConvention.Cdecl)]
static int Test(int a)
{
return a + 1;
}
}
Эта статья CodeProject довольно хорошо объясняет процесс.
Использование управляемого кода в неуправляемом приложении
http://www.codeproject.com/KB/mcpp/ijw_unmanaged.aspx
Что ж, компилятор 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();
}