Метод экспорта с неуправляемым типом в подписи в сборке смешанного режима - PullRequest
0 голосов
/ 21 марта 2011

У меня есть сборка смешанного режима, построенная с опцией /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-библиотеками смешанного режима?

1 Ответ

2 голосов
/ 21 марта 2011
...