Domanda

Ho un gruppo in modalità mista, costruito con il /clr opzione. Sto cercando di esportare una classe da esso, per il consumo da un altro gruppo in modalità mista, anche costruito con il /clr opzione.

Il mio problema è che la firma del metodo contiene una miscela di tipi gestiti e non gestiti. Per esempio:

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

Inizialmente, ho provato a usare __declspec(dllexport) sulla classe non Ref che implementa questo. Questo non è riuscito con errore C3395: __declspec (dllexport) non può essere applicato a una funzione con la convenzione di chiamata __ClrCall, presumibilmente, a causa del tipo gestito nella firma. La mia prossima ripresa è stata quella di fare la classe A ref classe invece. Ora l'assemblaggio si accumula e il riflettore visualizza il metodo esportato in questo modo:

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

Tuttavia, nell'assemblea del client, non riesco a fare riferimento al metodo esportato ...

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

... produce l'errore C2039: "Convert": non è un membro di "xxx :: atlcstringconverter". Ho controllato errori evidenti come la miscelazione di diversi tipi di caratteri che potrebbero causare l'abbinamento della firma.

Mi rendo conto che nessuno di questi tentativi di esportazione è davvero kosher in quanto una miscela di tipi gestiti/non gestiti è esposto fianco a fianco nella firma, ma poiché questa miscela di gestita/non gestita va bene entro Un gruppo in modalità mista, mi chiedevo se non c'era modo di esportare tipi usando questa miscela di tipi nella firma tra DLL in modalità mista?

È stato utile?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top