considere el siguiente código c++

#include "stdafx.h"
    #include<iostream>
    using namespace std;


this much part i want in c#..

void ping(int,char* d[]);

    void ping(int a,char *b[])
    {
    int size;
    size=sizeof(b)/sizeof(int); //total size of array/size of array data type

    //cout<<size; 
        for(int i=0;i<=size;i++)
        cout<<"ping "<<a<<b[i]<<endl;
    }

y la parte inferior es en c++

int _tmain(int argc, _TCHAR* argv[])
{
    void (*funcptr)(int,char* d[]);

    char* c[]={"a","b"};
    funcptr= ping;
    funcptr(10,c);

    return 0;
}

¿cómo puedo implementar el mismo en c#..
m nuevo en c#. ¿cómo puedo tener puntero char array en c#?

  • Esto le ayudará a: http://msdn.microsoft.com/en-us/library/ezftk57x.aspx
  • sizeof(b)/sizeof(int) – no es muy bueno el código de C++. No lo utilice como un ejemplo.
  • sí estás en lo correcto, yo estaba en el camino equivocado 🙂 Gracias!
  • gracias otra vez
  • -1 – sus comentarios a lo largo de este hilo implican un tema completamente diferente a la que aparece en su OP.
InformationsquelleAutor Mr.Vicky | 2012-09-20

5 Comentarios

  1. 3

    Sueles evitar char* o char[] en favor de la cadena clase. En lugar de tener un char* d[], tendría un string[] d en cambio, si usted desea una matriz de cadenas, o de un simple string d si desea una lista única de caracteres.

    Interoperabilidad entre C++ y C# siempre es complicado. Algunas buenas referencias incluyen Pasar C# string en C++ y de pasar a C++ resultado (string, char*.. lo que sea) a C# y La utilización de matrices y punteros en C# con DLL de C.

    • Seguramente cadena reemplazar char[], ya que después de todo es una matriz de caracteres? Yo podría muy bien estar equivocado, por cierto, sólo estoy preguntando.
    • Depende de si james quiere una lista de cadenas o de una sola cadena. Me han aclarado la respuesta adecuada.
    • quiero la lista de todos los contenidos presentes en la matriz de
    • Estás tratando de pasar de la char*d[] a un método de C# (como en C++ a C# interoperabilidad) o simplemente la aplicación de un concepto similar en C#?
    • sí m tratando de pasar chaar*d[] de dll en c++ a c#
    • Por favor, reformular la pregunta específica que indique que. Lee la pregunta (para mí) como usted está tratando de representar el mismo concepto en C#.
    • he replanteado mi pregunta

  2. 0

    Un string es una lista de caracteres. Con la mención de carácter manipulación y el uso de bucles estoy asumiendo que su preocupación es trabajar con caracteres particulares de una lista o matriz, y en este sentido se puede codificar de manera casi idéntica al interrogar personajes en particular de un string (como si se tratara de un char matriz).

    Por ejemplo:

    string testString = "hello";
    char testChar = testString[2];

    testChar, en este caso, será igual a ‘l’.

  3. 0

    En primer lugar, su «C++» código es en realidad C y mala C en que – no se ejecutará correctamente en todos. sizeof(b) se no el tamaño de la matriz o algo así, se le dará el tamaño de un puntero. Considere la posibilidad de escribir algunos correcto de C++ antes de intentar convertir a C#.

    template<int N> void ping(int a, std::array<std::string, N>& arr) {
        for(int i = 0; i < N; i++) std::cout << a <<  arr[i] << "\n";
    }
    int _tmain(int argc, _TCHAR* argv[]) {
         std::array<std::string, 2> c = { "a", "b" };
         ping(10, c);
        return 0;
    }

    C# no tiene estáticamente del tamaño de las matrices, pero el resto es muy fácil de hacer

    public static void ping(int a, string[] arr) {
        for(int i = 0; i < arr.Length; i++) {
             System.Console.Write(a);
             System.Console.Write(arr[i]);
        }
    }
    public static void Main(string[] args) {
        string[] arr = { "a", "b" };
        ping(10, arr);
    }
  4. 0

    Esto debería ayudarle, aunque tenga en cuenta que el tamaño del búfer de salida es fijo, por lo que este no trabajo para la dinámica del tamaño de las cadenas, usted necesita saber el tamaño de antemano.

    public unsafe static void Foo(char*[] input)
    {
        foreach(var cptr in input)
        {
            IntPtr ptr = new IntPtr(cptr);
            char[] output = new char[5]; //NOTE: Size is fixed
            Marshal.Copy(ptr, output, 0, output.Length);
    
            Console.WriteLine(new string(output));
        }
    }

    Recuerde permiten código inseguro, ya que es la única manera que usted puede utilizar fija punteros en C# (Derecha-haga clic en proyecto, propiedades, construir, permiten código no seguro).

    La próxima vez sea más específico y claro, y tratar de actuar de manera más respetuosa hacia las personas de aquí, no estamos recibiendo pago para ayudarle a saber 🙂

  5. 0

    podemos hacerlo como

    en DLL tendremos

        extern "C" __declspec(dllexport) void  __stdcall Caller() 
            { 
    
    
            static char* myArray[3];
    
            myArray[0]="aasdasdasdasdas8888";
    
            myArray[1]="sssss";
    
    
            FunctionPtr1(2,myArray);
    
    
        } 
    
    
    
    
    
    and in C# i just added following lines
    
     public static void ping(int a, IntPtr x)
            {
    
                Console.WriteLine("Entered Ping Command");
                  //code to fetch char pointer array from DLL starts here
                  IntPtr c = x;
                   int j = 0;
                   string[] s = new string[100]; //I want this to be dynamic 
                   Console.WriteLine("content of array");
                   Console.WriteLine("");
    
                do
                {
                    s[j] = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(c, 4 * j));
                    Console.WriteLine(s[j]);
                    j++;
    
                } while (s[j - 1] != null);
                //**********end****************
    
                Console.WriteLine("Integer value received from DLL is "+a);
    
            }

Dejar respuesta

Please enter your comment!
Please enter your name here