Pasar un puntero de función desde C ++ para que sea llamado por C # - Los argumentos de las funciones incluyen una cadena de caracteres ancha (LPCWSTR)

Estoy escribiendo una biblioteca C # para ser utilizada por la aplicación nativa de C ++. Estoy usando C ++ / CLI como mecanismo de interoperabilidad.

Necesito pasar una función de devolución de llamada de C ++ a C # (usando C ++ / CLI como capa intermedia). La biblioteca C # necesita llamar a la función C ++ con una cadena de caracteres anchos terminada en cero; es decir, el prototipo de la función de devolución de llamada es

Func (LPCWSTR pszString);

Hay otros parámetros, pero no son importantes para esta discusión.

Busqué en la red y encontré el método Marshal.GetDelegateForFunctionPointer que puedo usar. El problema con esto es que convierte System.String de C # a char * y no wchar_t * que estoy buscando.

Además, cuál es el mejor método para lograr este ejemplo de código, incluida la parte C ++ / CLI, si es posible. C ++ / CLI dll depende de C # dll. El método debe llamarse sincrónicamente.

Respuestas a la pregunta(2)

Su respuesta a la pregunta