У меня есть DLL, который я записал в C#, и я хочу использовать его и с приложениями C# и с приложениями, записанными в неуправляемом VC ++. Действительно ли это возможно?
В дополнение к другим ответам здесь, вот статья поддержки MS, которая описывает ваш сценарий.
Что ж, похоже, мне снова нужно вызвать мой неуправляемый экспорт . ; -)
Только что ответил на аналогичный вопрос 2 дня назад. Это полностью работает в C # и даже создает файлы .lib и .exp для вашей сборки C #, которые будут использоваться C ++:
internal class Sample
{
[DllExport("_export_test", CallingConvention.Cdecl)]
static int Test(int a)
{
return a + 1;
}
}
Вы можете сделать сборку C # видимой для COM и использовать ее таким образом.
В свойствах проекта C # под кнопкой «Информация о сборке» выберите «Сделать COM видимым».
Существует множество способов доступа к COM-объектам из Native C ++, самый простой / лучший способ зависит от того, что вы делаете и как вы это делаете.
Это больше, чем просто COM-взаимодействие, в часто задаваемых вопросах MSDN также перечислены менее известные методы:
2.2 Как мне вызвать сборку .NET из встроенного Visual C ++?
Существует четыре основных метода вызвать сборку .NET из собственного VC ++ код. Microsoft All-In-One Code Framework содержит рабочие примеры, которые продемонстрировать методы.
Собственный модуль VC ++ вызывает API хостинга CLR для размещения среды CLR, загрузки и вызовите сборку .NET. (Все в одном Пример кода Code Framework: CppHostCLR)
Если сборка .NET может быть представлена как компонент COM, родной Модуль VC ++ может вызывать .NET. сборка через .NET - COM interop. (Образец комплексной платформы кода Код: CppCOMClient)
Reverse PInvoke: управляемый код вызывает собственный код, передавая делегат собственный код может перезвонить. (Образец комплексной платформы кода Код: CSPInvokeDll)
Если модулю, содержащему собственный код VC ++, разрешено включить CLR , собственный код VC ++ может вызывать Сборка .NET напрямую через «It Just Works », или« IJW », механизм. (Пример кода универсальной платформы кода: CppCLIWrapLib)