Miércoles 20 de Noviembre de 2024, 18:47
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
Convertir Un Struct En Un Char*
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Convertir Un Struct En Un Char* (Leído 2803 veces)
snay
Nuevo Miembro
Mensajes: 6
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
Tweet
JuanK
Miembro de ORO
Mensajes: 5393
Nacionalidad:
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
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:
Re: Convertir Un Struct En Un Char*
«
Respuesta #3 en:
Lunes 3 de Diciembre de 2007, 21:17 »
0
Código: Text
[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Ansi ) ]
public struct IsisSrcHeader
{
public int number;
public int hits;
public int recs;
public int segmentpostings;
public System.Char[] dbname;
public System.Char[] booleanexpr;
};
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
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:
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
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:
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
char* pun_SearchStru = ((char*)pnt);
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
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:
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
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
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
C#
(Moderador:
ProfesorX
) »
Convertir Un Struct En Un Char*