Метод экспорта с неуправляемым типом подписи в сборке смешанного режима
-
28-10-2019 - |
Вопрос
У меня есть сборочный режим, построенный с /clr
вариант. Я пытаюсь экспортировать класс из него, для потребления с помощью еще одной сборки смешанного режима, также построенного с /clr
вариант.
Моя проблема заключается в том, что подпись метода содержит смесь управляемых и неуправляемых типов. Например:
static System::String ^Convert( const CString from );
Первоначально я пытался использовать __declspec(dllexport)
на классе без реф, реализующий это. Это не удалось с ошибкой C3395: __declSpec (dllexport) не может быть применен к функции с соглашением о вызове __clrcall, предположительно, из -за управляемого типа в подписи. Моим следующим образом было сделать класс А ref
класс вместо. Теперь сборка строит, а отражатель отображает экспортированный метод, как SO:
public static unsafe string Convert(CStringT<wchar_t,ATL::StrTraitATL<wchar_t,ATL::ChTraitsCRT<wchar_t> > > modopt(IsConst) modreq(IsCopyConstructed)* from);
Однако в клиентской сборке я не смогу ссылаться на экспортируемый метод ...
CString atlString("test");
AtlCStringConverter::Convert( atlString );
... дает ошибку C2039: «преобразовать»: не является членом 'xxx :: atlcstringConverter'. Анкет Я проверил на наличие очевидных ошибок, таких как смешивание различных типов Char, которые могут привести к тому, что подпись не подходит.
Я понимаю, что ни одна из этих попыток экспорта не является действительно кошерной в том смысле, что смесь управляемых/неуправляемых типов обнаружена рядом в подписи, но, поскольку эта смесь управляемого/неуправляемого в порядке в пределах Сборка смешанного режима, мне было интересно, невозможно ли экспортировать типы, используя эту смесь типов в подписи между DLL смешанного режима?
Решение
Этот вопрос и ответ могут помочь:Лучший обходной путь для ошибки компилятора C2158: make_public не поддерживает нативные типы шаблонов