• Domingo 22 de Diciembre de 2024, 14:05

Autor Tema:  Convertir Un Struct En Un Char*  (Leído 2818 veces)

snay

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Convertir Un Struct En Un Char*
« en: Jueves 29 de Noviembre de 2007, 17:40 »
0
Por favor necesito convertir o tratar un struct como un char* el problema es que tengo una dll externa y a uno de sus metodo se le debe de pasar una referencia a un tipo de estructura pero se la pasan como char

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Convertir Un Struct En Un Char*
« Respuesta #1 en: Viernes 30 de Noviembre de 2007, 14:30 »
0
...
cual es la estructura que debes convertir?
como tip... mientras tanto... las estructuras de C++ se deben crear en C# como clases.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

snay

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Convertir Un Struct En Un Char*
« Respuesta #2 en: Lunes 3 de Diciembre de 2007, 16:26 »
0
mira en esta es la estructura

public struct IsisSrcHeader
{
    public int number;            /* sSearch number (start in 1). */
    public int hits;               /* tTotal posting retrieved. */
    public int recs;               /* tTotal records retrieved. */
    public int segmentpostings;         /* nNumber of hits. */
    public System.Char[] dbname;      /* dData base name. */
    public System.Char[] booleanexpr;   /* sSearch expression. */
};

y se la tengo que pasar al siguinte metodo

 [DllImport("Isis32.dll", EntryPoint = "IsisSrcSearch")]
    unsafe public static extern int IssSrcSearch(int handle, int tsfnum, char* express, char* SearchStru);

ahora en el ejemplo que tengo esta en visual basic y se lo pasan asi

IsisSrcSearch (H, 0, Expression, TOCHAR(Hdrstru));



a ver si me puedes tirar un cabo con esto

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Convertir Un Struct En Un Char*
« Respuesta #3 en: Lunes 3 de Diciembre de 2007, 21:17 »
0
Código: Text
  1. [ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Ansi ) ]
  2. public struct IsisSrcHeader
  3. {
  4.  public int number;
  5.  public int hits;
  6.  public int recs;
  7.  public int segmentpostings;
  8.  public System.Char[] dbname;
  9.  public System.Char[] booleanexpr;
  10. };
  11.  

esa es la declaración de esa estructura en C#, si lo que quieres adicionalmente es apuntarle con char* debes declarar tipos unsafe y trabajar / compilar habilitando esa opción en el compilador.

También puedes trabajar con 'punteros administrados' haciendo uso de IntPtr y de la clase estática Marshall:

Marshal.StructureToPtr

El tip de antes estaba mal, ya que en efecto es al contrario, las estructuras de C# se van a c++ como clases.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

snay

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Convertir Un Struct En Un Char*
« Respuesta #4 en: Lunes 3 de Diciembre de 2007, 22:47 »
0
el problema es que cuando declaro  
IsisSrcHeader* SearchStru;

me da un error , algo de que no se puede declara un puntero a un tipo de dato admninistrador y lo tengo declarado dentro de unsafe.

nsafe
            {
                IsisSrcHeader* SearchStru;
                SearchStru.dbname = new char[64];
                SearchStru.booleanexpr = new char[513];
                System.String  str = "C:\\AppServ\\www\\weblis\\DB\\Libcat\\Work";
                char* va = ((char*)Marshal.StringToHGlobalAnsi(str));

              //IntPtr estructura = ((char*)SearchStru);

                int A = Myisisdll.IsisAppNew();
                int H = Myisisdll.IsisSpaNew(A);
                int r = Myisisdll.IsisSpaMf(H, va);
                System.String cadena = "*";
               
                //Marshal.StructureToPtr(SearchStru, va, badera);

                System.Char* cadenaptr = ((System.Char*)Marshal.StringToHGlobalAnsi(cadena));



                r = Myisisdll.IsisSrcSearch(H, 0, cadenaptr, );



si tuviera algun ejemplo del uso del Intptr pues no entiendo bien su uso

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Convertir Un Struct En Un Char*
« Respuesta #5 en: Martes 4 de Diciembre de 2007, 05:06 »
0
asi sera muy dificil de ayudarte... pega todo el codigo para ver como has declaradop el struct , recuerda que si usas punteros inseguros no administrados debes usar el operador primario de referencia '->' en vez de '.'
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

snay

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Convertir Un Struct En Un Char*
« Respuesta #6 en: Miércoles 5 de Diciembre de 2007, 15:01 »
0
mira este es elcod en general, pero ademas ahora hciendo uns prueba me acabo de dar cuenta que no m,e esta utilizando la dll en ningun momento, porque yo se la habia copiado para system32, porque me habian dicho que debia copiarlas ahi y pues me las borre y no sucedio nada, dejame preuntart es ahi donde se debe de copiar la dll o en otra direccion, ?como se registran las dll ?
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Convertir Un Struct En Un Char*
« Respuesta #7 en: Jueves 6 de Diciembre de 2007, 19:51 »
0
1- no es necesario pegarle en  system32, desde que este en el mismo folder del ejecutable funciona o también puedes cambiar una configuración para que te la busque ahí donde la pongas...

2- aunque estés en un contexto unsafe no puedes declarar un puntero de un tipo de dato administrado...

ya no recuerdo muy bien , pero

Código: Text
  1. char* pun_SearchStru = ((char*)pnt);
  2.  

esto debe estar mal, busca metodos dentro de pnt o dentro de la clase Marshall que te permitan convertir pnt en un puntero inseguro.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

snay

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Convertir Un Struct En Un Char*
« Respuesta #8 en: Viernes 7 de Diciembre de 2007, 16:06 »
0
mira hermano no se como registrar la dll en el visualstudio para poder utilizarla o de q manera le digo en que lugar se encuentra

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Convertir Un Struct En Un Char*
« Respuesta #9 en: Viernes 7 de Diciembre de 2007, 16:11 »
0
ya te  lo dije mas arriba, no entiendo cual es tu problema y nunca he visto necesidad de registrar ninguna dl para eso.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

snay

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Convertir Un Struct En Un Char*
« Respuesta #10 en: Martes 11 de Diciembre de 2007, 14:47 »
0
hermano como puedes cambiar una configuración para que te la busque la dll donde uno  quiera