Pasarle Strings a una funcion de una DLL en VB6

Iniciado por Krnl64, 31 Mayo 2006, 03:20 AM

0 Miembros y 1 Visitante están viendo este tema.

Krnl64

Vereis, el tema es que programe el code de la Siguiente Funcion para extraer los parámetros entre parentesis y corchetes que le pasaba a 1 Base de Datos.

Hasta aqui Ok.

Bueno, pues paso la funcion a 1 DLL y resulta que no me devuelve ningun String.

Pense que quiza habia que tratar la cadena antes de pasarsela a la funcion quitandole los espacios, pero esto tampoco me funciona.

Podeis decirme que tengo que hacer para que funcione ?

Gracias



Function Parser(texto As String) As String

'' esta función extraera lo que encuentre entre parentesis y corchetes ignorando lo que haya antes

Dim lon As Integer ' longitud de la cadena

Dim pasadas As Long ' contador 1

Dim counter As Integer ' contador 2

Dim numero As String '' letra actual xDD

Dim num As String '' numero a formar tipo string

Dim cor As String '' nombre de la tabla


lon = Len(texto)

counter = 1

For pasadas = 1 To lon

    numero = Mid(texto, counter, 1)
   
       
        If numero <> "(" Then
       
        counter = counter + 1

       
        Else
Do
       counter = counter + 1
       

       
        numero = Mid(texto, counter, 1)
       
                If numero = ")" Then
                GoTo en
                End If
       
           
        num = num + numero

       
DoEvents

Loop
en:
        End If

If numero = "[" Then

Do

       
        numero = Mid(texto, counter, 1)
       
        counter = counter + 1
   
        If numero = "]" Then
    GoTo sal
    End If
       
        cor = cor + numero
       
Loop
sal:
Else
End If


Next pasadas

Parser = num + "," + cor

End Function





<--v1c1ous-->

Buenas

Tiene que ser una funcion publica:

CitarPrublic Function Parser(texto As String) As String
{RESTO DE FUNCION}

Tenes que declarar la libreria:

CitarPublic Declare Function mifuncion Lib "C:\TUDLL.dll" ( _texto As String) As String

Si no lo solucionas con eso es que estas creando mal la libreria DLL, explica un poco mas cual es el proceso que seguis.

Saludos.


Krnl64

Efectivamente, La funcion dentro de la DLL es Public.

Y tambien la declaro Public en el proyecto que la uso.

El problema es que no se si la funcion coje el texto, es decir cuando llamo a la funcion asi:



Y=Parser(y)



No se que texto llega a la DLL, porque la funcion me devuelve un string vacio.

A ver si me pueden ayudar.

Gracias.


Krnl64

Ya solucione el asunto.

Digo el motivo de por qué no funcionaba, para que no le pase a nadie igual que a mi.


Para Pasarle un argumento tipo String a una funcion en una DLL creada en VB6, hay que convertirla a UNICODE y para que nos devuelva 1 string, el valor devuelto debemos limpiarlo.



''Para Pasar el argumento tipo String:

y = StrConv(y, vbUnicode, vbcomparebinary)





'' Para tratar el valor devuelto

y=Mtrim(y)

'' Ahora ya podemos manejar el valor dentro de nuestro programa

Private Function MTrim(s As String) As String
    Dim i As Long
    Dim res As String
   
    For i = 1 To Len(s)
        If Mid$(s, i, 1) <> Chr$(0) Then
            res = res & Mid$(s, i, 1)
        End If
    Next
   
    MTrim = res

End Function


Salu2