Метод экспорта с неуправляемым типом подписи в сборке смешанного режима

StackOverflow https://stackoverflow.com/questions/5377648

  •  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 смешанного режима?

Это было полезно?
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top