quando você tentou passar como string, qual a mensagem de erro q deu?? a mesma q você postou acima?? Quando tento passar como string, nem consigo compilar e gera o erro Run-Time error '13' - Type mismatch e quando da essa mensagem de erro, qual linha ele aponta?? a linha da declaracao ou a linha q chama a funcao?? a declaracao no visual basic, foi você q fez na mao, ou você pegou de algum outro exemplo, de algum manual alguma coisa assim?? Sim, foi Eu quem fiz na mão. tipo não lembro quase q nd desses detalhes de c, mas vi q você não declarou o TipoPeriodo com ByVal. qual seria o motivo?? é porque ele não esta como ponteiro em c?? já tentou por o ByVal pra ver se funciona?? porque tipo, não lembro direito, mas o ponteiro de string, significa q se o parametro for um array de char, ele vai saber a posicao inicial da memoria e vai poder ler a string toda, certo?? como o TipoPeriodo é um caracter só, ele não precisa do ponteiro. mas mesmo assim acho q precisaria do ByVal não?? porque tipo, o valor do parametro não pode ser alterado. então tem q ser ByVal. e sera q os parametros com ponteiros não precisariam ser ByRef?? seila, acho q você deveria dar uma olhada nessa parte tb. Bem, li que no visual basic quando passamos string para uma função que declaramos como byval, estamos na verdade passando o ponteiro desta variável, ou seja justamente o que a funçao da dll aguarda. Agora, quando declaro como byref, até consigo compilar mas gera o erro de Run-Time error '6': Overflow bom, tb posso sugerir essas opcoes: 1. declare como byte e passe o valor do caractere na tabela ascii. UFA, Estava aqui respondendo seu email quando funcionou com esta opção. 2. declare como string e passe o proprio caractere (exemplo: "M") e se você entender ingles, tb pode tentar da uma lida aqui ó: http://sandsprite.com/CodeStuff/Writing_A_C_Dll_for_VB.html veja ai o q você consegue, qualquer coisa poste de novo. EDITADO: ou veja esse link aqui q deve resolver seu problema: http://www.planet-source-code.com/vb/scrip...83&lngWId=1 esse programa consegue ler a funcao da dll e gera automaticamente o codigo da declaracao do visual basic (alias, eu ate já tinha baxado um desse antes pra ler apis, não sei se é o mesmo). de acordo com ele sua funcao fica assim: Public Declare Function DLLATO17GeraArquivo Lib "libname" ( ByRef szArquivoBinario As String, ByRef szArquivoTexto As String, ByRef szPeriodoIni As String, ByRef szPeriodoFIM As String, ByVal TipoPeriodo As String, ByRef szUsuario As String, ByRef szTipoLeitura As String ) As Long Concluindo......... Resolvido........ Solucionado...... Conforme orientações do Kuroi, coloquei o Byval na declaração da função no parâmetro TipoPeriodo e passei o valor decimal ASCII da letra M. A Declaração ficou assim: Declare Function DLLATO17GeraArquivo Lib "ATO17.dll" (ByVal szArquivoBinario As String, ByVal szArquivoTexto As String, ByVal szPeriodoIni As String, ByVal szPeriodoFIM As String, ByVal TipoPeriodo As Byte, ByVal szUsuario As String, ByVal szTipoLeitura As String) As Integer A chamada da função ficou assim: iresposta = DLLATO17GeraArquivo("c:\ato\TESTE.TDM", "c:\ato\TESTE1.TXT", "20080801", "20080830", 77, "1", "TDM") Kuroi, muito obrigado de coração. Que Deus sempre te ilumine seus caminho, e continue sendo esta pessoa sempre prestativa. Obrigado! Obrigado! Obrigado! Airton Farias