02. december 2006 - 20:09Der er
11 kommentarer og 1 løsning
Brug af ekstern fil i dll-funktion
Er det muligt at tilknytte en ekstern fil til en dll-fil således at den "hænger ved" når dll'en distribueres eller bliver kompileret med i koden? Jeg slår værdier op i en txt-fil som jeg så bruger i min funktion og derfor skulle de gerne hænge sammen.
Listen skal ikke være dynamisk så det gør ikke noget at den bliver hardkodet og kompileret.
Og hvis ikke: Hvad er så det bedste alternativ - det er omkring 1000 poster så en select case bliver i givet fald noget lang :-)
Jeg har en funktion som jeg fodrer med et tal og så returnerer den en tekst afhængig af tallet - sagen er at få knyttet txt-filen til dll'en så det hele kommer med når dll'en distribueres.
Jeg kender godt arrays, men tror ikke rigtigt det kan bruges da posterne ikke har fortløbende numre, men ellers har du ret omkring den ønskede funktionalitet. Det nemmeste var jo helt klart hvis min txt-fil kunne integreres i sin nuværende form.
Det er ikke noget problem, med at de ikke er fortløbende numre..
Så laver du bare en funktion, der løber arrayen igennem..
eksempel:
' Felterne i din array ser sådan ud: ' 342342:Hans Hansen ' 544352:Katten og musen ' 657867:Endnu en post
' Ønsket id: 544352 min_ip = 544352 ' denne hentes via en funktion, f.eks.: msgbox HentTekst(544352) for i = LBound(tekst) to UBound(tekst) tmp = tekst(i) if left(tmp, instr(tmp, ":")) = min_ip then HentTekst = mid(tmp, instr(tmp, ":")) ' returnerer "Katten og musen" exit for end if next
dim minarray minarray = array("342342:Hans Hansen","544352:Katten og musen","657867:Endnu en post")
function HentTekst(min_id)
dim tmp, id, tekst, i dim retur retur = "Teksten blev ikke fundet"
for i = LBound(minarray) to UBound(minarray) tmp = split(minarray(i), ":") id = tmp(0) tekst = tmp(1) if "" & id = "" & min_id then retur = tekst exit for end if next
HentTekst = retur end function
msgbox HentTekst(544352)
Nu ved jeg ikke hvordan koden i din DLL ser ud, men du kan definere variabler øverst i filen.. lige som jeg har gjort med eksemplet her..
Jeg kan ikke få indlæsningen af mit array til at virke - jeg har over 1000 poster og det går galt ved hvert linieskift. Jeg kan ikke holde linierne sammen med "_" ....nogen gode idéer?
Giv et eksempel på dataene i txt-filen.. så kan jeg sikkert lave en konvertering..
F.eks, kan der være ",", ".", ";", osv i dataene?
Hvis der er et tegn der ikke kan forekomme i dataene, kan du bruge det som delimeter/separator.. Og derefter bruge Split funktionen (Visual Basic version højere end 5)..
Eksempel:
dim mintekst, minarray mintekst = "342342:Hans Hansen;544352:Katten og musen;657867:Endnu en post" minarray = split(mintekst, ";")
function HentTekst(min_id)
dim tmp, id, tekst, i dim retur retur = "Teksten blev ikke fundet"
for i = LBound(minarray) to UBound(minarray) tmp = split(minarray(i), ":") id = tmp(0) tekst = tmp(1) msgbox "min_id: " & min_id & ", id: " & id & ", tekst: " & tekst if "" & id = "" & min_id then retur = tekst exit for end if next
HentTekst = retur end function
msgbox HentTekst(544352) ' udskriver/returnerer "Katten og musen"
Jeg kan evt få programmet til at sætte det korrekt op, hvis du giver mig et eksempel på de data der ligger i txt filen..
Så fik jeg det til at virke :-) VB kan tilsyneladende ikke håndtere så store arrays i array-funktionen, så jeg splittede mit array i to og lavede en select case og indlæser så det relevante array afhængig af inputnr.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.