Método de exportación con firma de tipo no administrado en ensamblaje en modo mixto

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

  •  28-10-2019
  •  | 
  •  

Pregunta

Tengo un ensamblaje de modo mixto, construido con el /clr opción.Estoy intentando exportar una clase desde allí, para que la consuma otro ensamblado de modo mixto, también creado con el /clr opción.

Mi problema es que la firma del método contiene una combinación de tipos administrados y no administrados.Por ejemplo:

static System::String ^Convert( const CString from );

Al principio intenté utilizar __declspec(dllexport) en la clase sin referencia que implementa esto.Esto falló con error C3395:__declspec(dllexport) no se puede aplicar a una función con la convención de llamada __clrcall, presumiblemente, debido al tipo administrado en la firma.Mi siguiente decisión fue hacer de la clase una ref clase en su lugar.Ahora el ensamblaje se construye y Reflector muestra el método exportado así:

public static unsafe string Convert(CStringT<wchar_t,ATL::StrTraitATL<wchar_t,ATL::ChTraitsCRT<wchar_t> > > modopt(IsConst) modreq(IsCopyConstructed)* from);

Sin embargo, en el ensamblaje del cliente, no puedo hacer referencia al método exportado...

CString atlString("test");
AtlCStringConverter::Convert( atlString );

...produce el error C2039:'Convertir' :no es miembro de 'XXX::AtlCStringConverter'.He comprobado si hay errores obvios, como mezclar diferentes tipos de caracteres, que podrían provocar que la firma no coincida.

Me doy cuenta de que ninguno de estos intentos de exportación es realmente kosher en el sentido de que una combinación de tipos administrados/no administrados se exponen uno al lado del otro en la firma, pero dado que esta combinación de administrados/no administrados está bien dentro un ensamblado de modo mixto, me preguntaba si no hay forma de exportar tipos utilizando esta combinación de tipos en la firma entre archivos DLL de modo mixto.

¿Fue útil?
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top