Boa tarde pessoal...
Alguém sabe como faço para acessar um endereço de memória (ponteiro) de um array?
Obrigado.
Endereço de memória de um Array...
Moderador: Moderadores
- ademilson
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 07 Ago 2007 10:01
- Localização: Maringá
- Contato:
Endereço de memória de um Array...
_____________________
José Ademilson da Cruz
Gerente de Desenvolvimento Harbour
SG Sistemas de Automação ltda.
José Ademilson da Cruz
Gerente de Desenvolvimento Harbour
SG Sistemas de Automação ltda.
Re: Endereço de memória de um Array...
EU não tive tempo de testar, mas lendo dos sources deduzo que seja algo como o abaixo:
Use deste modo:
Código: Selecionar todos
#include "hbapi.h"
HB_FUNC( ARR2PTR )
{
PHB_ITEM pArray = hb_param( 1, HB_IT_ARRAY );
if( pArray )
{
hb_retptr( ( void * ) pArray->item.asArray.value );
}
}Código: Selecionar todos
? ARR2PTR( <Array> )Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"
E-mail/MSN: contato@vailton.com.br
Skype: vailtom
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"
E-mail/MSN: contato@vailton.com.br
Skype: vailtom
- ademilson
- Usuário Nível 2

- Mensagens: 87
- Registrado em: 07 Ago 2007 10:01
- Localização: Maringá
- Contato:
Re: Endereço de memória de um Array...
Vailton, testei aqui o seu cógifo e a DLL me retonra um erro.
Na verdade tenho aqui uma função de uma dll declarada em VB, se possível vc poderia me dizer como fazer para declarar e usar esta função em xharbour:
Tenho esta declaração em VB:
Public Declare Function radio_recv5 Lib "RioCom" (ByRef Funcao As Long, ByRef terminal As Long, ByRef Licenca As Long, ByRef Msg As Long, ByRef Pratos As Long, ByRef Mesa1 As Long, ByRef Mesa2 As Long, ByRef AuxData As Long, ByRef Lugar1 As Long, ByRef Lugar2 As Long, ByVal addr_plus As Long, ByVal addr_qtds As Long, ByVal st_mesa1 As String, ByVal st_mesa2 As String) As Long
Declarei para xHarbour+FW:
DLL FUNCTION radio_recv5( Funcao AS LONG,;
terminal AS LONG,;
Licenca AS LONG,;
Msg AS LONG,;
Pratos AS LONG,;
Mesa1 AS LONG,;
Mesa2 AS LONG,;
AuxData AS LONG,;
Lugar1 AS LONG,;
Lugar2 AS LONG,;
addr_plus AS LONG,;
addr_qtds AS LONG,;
st_mesa1 AS STRING,;
st_mesa2 AS STRING) AS LONG PASCAL LIB "riocom.dll"
No exemplo em VB de utilização desta função esta assim:
Dim p_plus(100) As Long
Dim p_qtds(100) As Long
addr_plus = VarPtr(p_plus(0))
addr_qtds = VarPtr(p_qtds(0))
radio_recv5(p_funcao, p_terminal, p_licenca, p_msg, p_pratos, p_mesa1, p_mesa2, p_auxdata, p_lugar1, p_lugar2, addr_plus, addr_qtds, st_mesa1, st_mesa2)
Minha dúvida esta na variaveis:
addr_plus
addr_qtds
Como fazer isto ?
Segue o que diz o manual:
Função :
int stdcall radio_recv3(int *Funcao,int *Terminal, int *Licenca,int *MsgNumber,int *Pratos,int *Mesa1,int *Mesa2, int *AuxData,int *lugar1,int *lugar2,int *plus,int *qtds)
Esta função é equivalente a radio_recv (descrita abaixo) , mas é mais fácil de utilizar.
int *plus é um apontador para um array de inteiros de 32 bits.
int *qtds é um apontador para um array de inteiros de 32 bits.
VB
Public Declare Function radio_recv Lib "RioCom" (ByVal Msg As String) As Long
Na verdade tenho aqui uma função de uma dll declarada em VB, se possível vc poderia me dizer como fazer para declarar e usar esta função em xharbour:
Tenho esta declaração em VB:
Public Declare Function radio_recv5 Lib "RioCom" (ByRef Funcao As Long, ByRef terminal As Long, ByRef Licenca As Long, ByRef Msg As Long, ByRef Pratos As Long, ByRef Mesa1 As Long, ByRef Mesa2 As Long, ByRef AuxData As Long, ByRef Lugar1 As Long, ByRef Lugar2 As Long, ByVal addr_plus As Long, ByVal addr_qtds As Long, ByVal st_mesa1 As String, ByVal st_mesa2 As String) As Long
Declarei para xHarbour+FW:
DLL FUNCTION radio_recv5( Funcao AS LONG,;
terminal AS LONG,;
Licenca AS LONG,;
Msg AS LONG,;
Pratos AS LONG,;
Mesa1 AS LONG,;
Mesa2 AS LONG,;
AuxData AS LONG,;
Lugar1 AS LONG,;
Lugar2 AS LONG,;
addr_plus AS LONG,;
addr_qtds AS LONG,;
st_mesa1 AS STRING,;
st_mesa2 AS STRING) AS LONG PASCAL LIB "riocom.dll"
No exemplo em VB de utilização desta função esta assim:
Dim p_plus(100) As Long
Dim p_qtds(100) As Long
addr_plus = VarPtr(p_plus(0))
addr_qtds = VarPtr(p_qtds(0))
radio_recv5(p_funcao, p_terminal, p_licenca, p_msg, p_pratos, p_mesa1, p_mesa2, p_auxdata, p_lugar1, p_lugar2, addr_plus, addr_qtds, st_mesa1, st_mesa2)
Minha dúvida esta na variaveis:
addr_plus
addr_qtds
Como fazer isto ?
Segue o que diz o manual:
Função :
int stdcall radio_recv3(int *Funcao,int *Terminal, int *Licenca,int *MsgNumber,int *Pratos,int *Mesa1,int *Mesa2, int *AuxData,int *lugar1,int *lugar2,int *plus,int *qtds)
Esta função é equivalente a radio_recv (descrita abaixo) , mas é mais fácil de utilizar.
int *plus é um apontador para um array de inteiros de 32 bits.
int *qtds é um apontador para um array de inteiros de 32 bits.
VB
Public Declare Function radio_recv Lib "RioCom" (ByVal Msg As String) As Long
_____________________
José Ademilson da Cruz
Gerente de Desenvolvimento Harbour
SG Sistemas de Automação ltda.
José Ademilson da Cruz
Gerente de Desenvolvimento Harbour
SG Sistemas de Automação ltda.
Re: Endereço de memória de um Array...
Eu já vi um código semelhante que o Antonio me mostrou outro dia... Mas sinto não poder ajudar, visto que não utilizo estas funçoes. Talvez mais alguem do forum possa dar uma dica neste caso.
Vailton Renato
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"
E-mail/MSN: contato@vailton.com.br
Skype: vailtom
"No dia mais claro, na noite mais escura... o bug sucumbirá ante a minha presença"
E-mail/MSN: contato@vailton.com.br
Skype: vailtom
