1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Excel e DLLs

Discussão em 'Programação' iniciada por AwakE, 13 de Dezembro de 2005. (Respostas: 3; Visualizações: 1000)

  1. AwakE

    AwakE Banido

    Tenho o seguinte problema:

    Preciso chamar uma .dll criada por mim a partir do Excel (VBA). O código da Dll é:

    Public Class Connect

    Public Shared Function GetClientes(ByVal kunnr As String) As DataTable


    Dim SAPProxy As SAPProxy1 = New SAPProxy1
    Dim s As String

    Dim cs As String = "X"
    SAPProxy.CustName = kunnr
    SAPProxy.CustNo = ""
    SAPProxy.Connection = New SAP.Connector.SAPConnection(cs)
    SAPProxy.Rfc_Customer_Get()
    Dim saida As DataSet = New DataSet
    Dim tabela As DataTable = New DataTable("Clientes")
    tabela.Columns.Add("ncli", Type.GetType("System.String"))
    tabela.Columns.Add("nomecli", Type.GetType("System.String"))

    tabela.Rows.Add(New Object() {SAPProxy.tblCust.Item(0).Kunnr, SAPProxy.tblCust.Item(0).Name1})

    Return tabela

    End Function

    End Class

    O conteudo não é muito relevante (é para SAP) é mais para verem a declaração.
    Compilei a Dll e meti-a no system32. Até aqui tudo bem.

    O problema está no Excel: Tenho o seguinte código:

    Private Declare Function GetClientes Lib "teste.dll" (ByVal kunnr As String) As DataTable

    Private Sub Actualiza_PI_Click()

    Dim kunnr As String
    Dim dados As DataTable
    Dim s As String
    dados = GetClientes(kunnr)
    End Sub

    O gajo rebenta no GetClientes "Cannot find dll entry point in teste.dll".

    Que se passa?

    Tks
     
  2. Delta

    Delta Suspenso

    vê lá se isto te pode servir para alguma coisa :

    http://www.techzonept.com/showthread.php?t=35873&highlight=extensos

    eu já criei várias DLLs

    o segredo está em criar uma classe pública, e isso já fizeste

    falta-te referenciar essa DLL e instanciar

    vê o exemplo que dei nessa thread

    e isto funciona tanto no VBA Word, VBA Excel ou VBA Access, ou em qualquer outro sítio
     
    Última edição: 14 de Dezembro de 2005
  3. MaTreCo

    MaTreCo Power Member

    Assim à primeira vista, estás a passar o argumento vazio.
    Não será disso, mas convém ires eliminando as hipóteses todas.
    Por outro lado, podes sempre referenciar a dll e chamares-a com "Connect.GetClientes("param1")" em vez de declarares a função como estás a fazer.
     
  4. ZyPhAX

    ZyPhAX Banido

    Obrigado pelas respostas.

    Em relação aos vossos comentarios, estava a fazer isso mal, entretanto ja corrigi mas continuava a não funcionar.

    Tive de por um wrapper COM à volta do código .Net para conseguir chamar aquilo a partir do Excel. Não ponho aqui o código porque estou em casa. Amanha no trabalho eu ponho o código final.

    Já agora o que a Dll fazia era ir buscar dados a um sistema SAP, chamando módulos de função lá existentes. Muito porreiro.
     

Partilhar esta Página