< návrat zpět

MS Excel


Téma: použití dll knihoven rss

Zaslal/a 4.9.2015 14:21

Dobrý den používám vlastní DLL knihovny. Následujíc´ím způsobem

Declare Function Rdol Lib "A:\Smeny_files\Jupiter\DLL\Jupiter.dll" Alias "Rdol@4" (ByVal NR As Integer) As Double

Declare Function ZateR Lib "A:\Smeny_files\Jupiter\DLL\Jupiter.dll" Alias "ZateR@4" (ByVal NR As Integer) As Double


potřeboval bych mít možnost zadat soubor *.DLL jako string proměnnou.

Zaslat odpověď >

icon #026670
eLCHa
Hmmm - to je pěkná divočárna ;))
Nebudu tvrdit, že to vím, protože tuhle myšlenku jsem nikdy neměl a proto jsem to nikdy nezkoušel (a nikdy ani nebudu).

Ale teoreticky
Prostě nadeklarujte všechny a pak v kódu použijte tu co potřebujete.If něco Then Rdol(x) Else ZateR(x)citovat
#026674
avatar
Nevím, jestli je možné deklaraci API vložit do podmínky If ... Else ... End If
Na stejné úrovni "nevím" je otázka, jestli knihovna a Alias mohou být volány textem z proměnné Kdyby to šlo, bylo by to docela elegantní.
Když o tom přemýšlím, tak bych řekl, že nebude fungovat ani jedno, ani druhé. Jdu si to vyzkoušet 4citovat
#026675
avatar
Jestli jsem si to nemyslel:
- deklarační příkaz nemůže být součástí procedury, a proto ho nelze podřídit příkazu If
- volání jména funkce ani Alias nemůže pocházet z proměnné ani z konstanty. Pokus o to vede na kompilační chybu "Expecting string constant"
Jediné, co fungovat podle mého soudu může (a bude), je deklarovat obě API, ale z algoritmu volat jenom tu, která odpovídá konkrétním podmínkám úlohy.citovat
#026708
avatar
Asi jsem špatně formuloval otázku.
chtěl jsem nahradit tento kód

Declare Function Rdol Lib "A:\Smeny_files\Jupiter\DLL\Jupiter.dll" Alias "Rdol@4" (ByVal NR As Integer) As Double

Declare Function ZateR Lib "A:\Smeny_files\Jupiter\DLL\Jupiter.dll" Alias "ZateR


něčím takovýmto, což nefunguje


dim knihovna as string

knihovna="A:\Smeny_files\Jupiter\DLL\Jupiter.dll"

Declare Function Rdol Lib knihovna Alias "Rdol@4" (ByVal NR As Integer) As Double

Declare Function ZateR Lib knihovna Alias "ZateR
citovat
#026710
avatar
Otázku jste formuloval srozumitelně, jen já jsem nesrozumitelně odpověděl. Vaše přání "Lib knihovna" je přesně to, co odpovídá mému "volání jména funkce ani Alias nemůže pocházet z proměnné ani z konstanty". Jinými slovy: podle mých testů "tudy cesta nevede" 7 .citovat
#026713
avatar
Děkujicitovat
icon #026716
eLCHa
Je to věc, kterou zkoušet nebudu, protože nemám jak. Ale můžete zkusit něco takovéhoDeclare Function Rdol1 Lib "Cesta1\Jupiter.dll" Alias "Rdol@4" (ByVal NR As Integer) As Double
Declare Function Rdol2 Lib "Cesta2\Jupiter.dll" Alias "Rdol@4" (ByVal NR As Integer) As Double
Pokud kompilátor sežere deklaraci na neexistující soubor, tak by pak mohlo fungovat něco jakoIf Len(Dir("cesta1")) > 0 Then
Rdol1
Else
Rdol2
End If

Ale asi by bylo lepší, kdybyste popsal, co chcete udělat. Protože je možné, že to vše lze udělat úplně jinak.citovat
#026717
avatar
Používám vlastní DLL knihovnu ve které mám napsané uživatelské funkce, které používám v sešitu. Knihovna je napsána ve freebasicu. Je možnost registrovat DLL knihovnu do systému. Jednak nemám administrátorská práva, jednak bych musel knihovnu registrovat na každém počítači, kde jichci použít. Chtěl bych v případě změny umístění knihovny provést změnu v kódu na jednom místě.citovat
#026719
avatar
Jen netestované nápady.

Zkusil jste deklarovat bez uvedení cesty?
Předpokládal bych, že pokud bude knihovna na vhodném místě (např. ve stejném adresáři jako soubor), tak by mohla být nalezena.

Pokud to selže, je tu vždy možnost použít win api:

LoadLibrary
FreeLibrary
GetProcAddress
CallWindowProc

A dopsat rozhraní.citovat
icon #026722
eLCHa
@lubo
Teď opravdu jen střílím, ale tipoval bych, že pokud to projde bez cesty, tak to bude hledat buď ve složce aplikace nebo v systémové (např. System32)

@Richard99
Máte to ve FreeBasic, takže Basic - není jednodušší doplněk? Klidně ve VBA?
Nebo nějaký objekt volaný pomocí CreateObject?citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Vynásobit hodnoty kurzem - Power Query

lubo • 25.4. 19:18

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 15:12

Relativní cesta - zdroje Power Query

Alfan • 25.4. 15:08

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 14:21

Relativní cesta - zdroje Power Query

Alfan • 25.4. 10:49

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 10:47

Relativní cesta - zdroje Power Query

Alfan • 25.4. 10:40