Cláudio,
Crie um objeto/variável do tipo SafeArray, execute os métodos Create e
Put (específicos para cada tipo) e utilize na função de sua DLL, por
exemplo:
!!CB!! 134
Function: Teste
Description:
Returns
Parameters
Static Variables
Local variables
: saArray
Class: SafeArray
: vItem1
Class: Variant
: vItem2
Class: Variant
: vItem3
Class: Variant
Actions
! Cria um SafeArray de Objetos com três posições
Call saArray.Create( VT_VARIANT, 3, 0 )
! Seta o primeiro elemento, indice 0 - exemplo: Number
Call vItem1.SetNumber( 10, VT_I2 )
Call saArray.PutVariant( vItem1, 0 )
! Seta o segundo elemento, indice 1 - exemplo: String
Call vItem2.SetString( "teste" )
Call saArray.PutVariant( vItem2, 1 )
! Seta o terceiro elemento, indice 2 - exemplo: Date
Call vItem2.SetDate( SalDateCurrent( ) )
Call saArray.PutVariant( vItem3, 2 )
! Usa na chamada da DLL
Call MinhaDll (saArray)
Sds,
Erasmo
--
Erasmo Bispo de Oliveira Junior
Gerente de Pesquisa e Desenvolvimento
Softway - Softcomex Informática Ltda.
Pabx: +55 (19) 3344.9200
Direto:+55 (19) 3344.9361
Fax: +55 (19) 3344.9240
e-mail: erasmo.olive...@sfw.com.br
web: http://www.softcomex.com.br
Antes de imprimir esta mensagem, pense em sua responsabilidade e
compromisso com o meio ambiente!
On 26/3/2009 12:45, Claudio Augusto Felix Pinto wrote:
Antes de mais nada queria compartilhar a minha satisfação em poder
participar desse seleto grupo, agora que consegui a inscrição no
mesmo. Nessa minha primeira postagem, uma dúvida sobre tipo de dado
estruturado no Centura 2.0.
Amigos, abri uma DLL feita em VB no Centura 2.0 usando o "ActiveX
Explorer" do centura. O Centura gerou a APL com os métodos definidos
na DLL (ou melhor, na TLB). Um dos métodos retorna uma estrutura
composta (tipo registro) de itens simples (como um numérico) e
complexos (como uma tabela). Ao gerar a "Functional Class" para esse
método, o Centura definiu esse parâmetro (que retorna uma estrutura de
registro) como sendo do tipo "SafeArray".
Ocorre que, até onde eu entendo, o SafeArray me pareceu ser um array
de um tipo de dado simples, e não um array de uma estrutura. Me
pareceu ser assim porque uma vez declarada a variável X como sendo do
tipo ArraySafe, eu preciso chamar o create dela: X.Create(p1, p2, p3),
no qual o parâmetro p1 vai definir o tipo de dado do Safearray.
Olhando o help do centura, em "Data type mappings", verifiquei que os
tipos de dados suportados são sempre tipos simples. Não vi nenhuma
opção que suporte uma estrutura.
A propósito, também não sei se o centura suporta a criação de um tipo
de dado estruturado (ou tipo registro) em form. Quando tentei usar
StructPoint na sessão "Variables", ele não permitiu. Me parece que ele
aceita o "Structpoint" apenas na sessão "External Function -> Library
name". No entanto, eu precisava definir um tipo de dado estruturado no
escopo do form (para usá-lo como parâmetro na chamada ao método) e não
no escopo de uma função externa.
Resumindo, eu gostaria de saber se o Centura permite ou não passagem
de parâmetros do tipo "Estrutura" de/para uma DLL e, em caso positivo,
como eu faço para montar a estrutura desse parâmetro que o Centura
definiu como sendo do tipo "SafeArray" ?
Atenciosamente,
Claudio Augusto