У меня есть сборка смешанного режима, построенная с опцией /clr
. Я пытаюсь экспортировать из него класс для использования другой сборкой смешанного режима, также с опцией /clr
.
Моя проблема в том, что сигнатура метода содержит смесь управляемых и неуправляемых типов. Например:
static System::String ^Convert( const CString from );
Изначально я пытался использовать __declspec(dllexport)
в классе non-ref, реализующем это. Это не удалось с ошибкой C3395: __declspec (dllexport) нельзя применить к функции с соглашением о вызовах __clrcall , предположительно, из-за управляемого типа в сигнатуре. Следующим моим решением было сделать класс ref
. Теперь сборка сборки и Reflector отображает экспортированный метод следующим образом:
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» . Я проверил очевидные ошибки, такие как смешивание различных типов символов, которые могут привести к несоответствию подписи.
Я понимаю, что ни одна из этих попыток экспорта на самом деле не является кошерной в том смысле, что смесь сигнатур управляемых / неуправляемых типов показывается рядом в сигнатуре, но поскольку эта комбинация управляемых / неуправляемых в порядке в пределах a Сборка в смешанном режиме, мне было интересно, нет ли способа экспортировать типы, используя эту смесь типов в сигнатуре между DLL-библиотеками смешанного режима?