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


Responder a