.net - metodo - ordenar una matriz bidimensional en java
Cómo organizar una matriz de estructuras-(.Net/C#=> C++) (2)
La respuesta depende de cuáles son las definiciones nativas que estás tratando de reunir también. No ha proporcionado suficiente información para que alguien pueda ayudar realmente.
Una cosa común que hace tropezar a las personas cuando organizan cadenas en matrices nativas es que las matrices nativas a menudo usan un búfer de tamaño fijo para la cadena asignada en línea con la estructura. Su definición está coordinando las cadenas como un puntero a otro bloque de memoria que contiene la cadena (que es el valor predeterminado).
[MarshalAs (UnmanagedType.ByValTStr, SizeConst = ##)] podría ser lo que estás buscando ...
Descargo de responsabilidad: Cerca de cero con conceptos de clasificación ..
Tengo una estructura B que contiene una cadena + una matriz de estructuras C. Necesito enviar esto a través del abismo gigante de interoperabilidad a un consumidor COM - C ++.
¿Cuál es el conjunto correcto de atributos que necesito para decorar mi definición de estructura?
[ComVisible (true)]
[StructLayout(LayoutKind.Sequential)]
public struct A
{
public string strA
public B b;
}
[ComVisible (true)]
[StructLayout(LayoutKind.Sequential)]
public struct B
{
public int Count;
[MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.Struct, SizeParamIndex=0)]
public C [] c;
}
[ComVisible (true)]
[StructLayout(LayoutKind.Sequential)]
public struct C
{
public string strVar;
}
editar: @Andrew Básicamente este es el problema de mis amigos. Él tiene esto funcionando en .Net - Hace algo de automatización para crear el .tlb / .tlh que luego puede usar en el reino de C ++. El problema es que no puede arreglar el tamaño de la matriz.
C ++: el lenguaje más potente para la programación de .NET Framework
Estaba a punto de abordar un proyecto que necesitaba ordenar datos estructurados a través del límite C ++ / C #, pero encontré la que podría ser una mejor manera (especialmente si conoce C ++ y le gusta aprender nuevos lenguajes de programación). Si tiene acceso a Visual Studio 2005 o superior, puede considerar el uso de C ++ / CLI en lugar de calcular referencias. Básicamente, le permite crear esta biblioteca híbrida mágica .NET / clase nativa que es 100% compatible con C # (como si hubiera escrito todo en C #, con el objetivo de consumirlo en otro proyecto C #) que también es 100% compatible con C y / o C ++. En su caso, podría escribir un contenedor de C ++ / CLI que ordenara los datos de C ++ en la memoria a la CLI en los tipos de memoria.
He tenido bastante suerte con esto, usando código C ++ puro para leer y escribir archivos de datos (esta podría ser una biblioteca de terceros de algún tipo, incluso), y luego mi código C ++ / CLI convierte (copia) los datos de C ++ en Tipos .NET, en memoria, que se pueden consumir directamente como si hubiera escrito la biblioteca de lectura / escritura en C #. Para mí, la única barrera era la sintaxis, ya que tienes que aprender las extensiones CLI para C ++. ¡Ojalá hubiera tenido para hacer preguntas de sintaxis, cuando estaba aprendiendo esto!
A cambio de caminar a través de la sintaxis, aprendes probablemente el lenguaje de programación más poderoso que puedas imaginar. Piénselo: la elegancia y la cordura de C # y las bibliotecas .NET, y el bajo nivel y la compatibilidad de la biblioteca nativa de C ++. No querrá escribir todos sus proyectos en C ++ / CLI, pero es excelente para obtener datos C ++ en proyectos C # / .NET. "Simplemente funciona".
Tutorial: