Forum » Programiranje » [VB 6] Klicanje funkcij dll-ja, napisanega v Cju.
[VB 6] Klicanje funkcij dll-ja, napisanega v Cju.
![](https://static.slo-tech.com/stili/avatar_gray.gif)
lukanium ::
Torej, imam neko periferno napravo na PCI (ena kamerca za merjenje očesnih premikov), ki ima priloženo osnovno aplikacijo in SDK, da lahko seveda uporabljaš raznorazne funkcije tudi v svojih programih. V osnovi je vse skupaj namenjeno za C, tako da SDK sestavljajo C dll, statična knjižnica (.lib) in header file z definicijami funkcij.
Problem je v tem, da uporabljam VB za svoj program, ki se nikakor noče sporazumeti z dll-jem (torej preko declare...). Nekako mi še rata zagnati samo aplikacijo od proizvajalca kamerce, od tu naprej pa se ustavi --> bad dll calling convention (torej ni napisan kot stdcall?).
Poleg tega seveda ni možno:
- ga registrirati z Regsvr32
- ali v VB preko project-> references... javi napako: Can't add a reference to the specified file.
Ima kdo kakšno idejo, kako bi se to rešilo? Torej, kako bi lahko normalno klical funkcije tega dll-ja iz VB-ja?
Vnaprej hvala za vse predloge!
Problem je v tem, da uporabljam VB za svoj program, ki se nikakor noče sporazumeti z dll-jem (torej preko declare...). Nekako mi še rata zagnati samo aplikacijo od proizvajalca kamerce, od tu naprej pa se ustavi --> bad dll calling convention (torej ni napisan kot stdcall?).
Poleg tega seveda ni možno:
- ga registrirati z Regsvr32
- ali v VB preko project-> references... javi napako: Can't add a reference to the specified file.
Ima kdo kakšno idejo, kako bi se to rešilo? Torej, kako bi lahko normalno klical funkcije tega dll-ja iz VB-ja?
Vnaprej hvala za vse predloge!
When a person can no longer laugh at himself,
it is time for others to laugh at him. [Thomas Szasz]
it is time for others to laugh at him. [Thomas Szasz]
![](https://static.slo-tech.com/stili/avatar_gray.gif)
darkolord ::
Kako pa kličeš funkcijo z declare? Mogoče je problem v parametrih...
Zgodovina sprememb…
- spremenilo: darkolord ()
![](https://static.slo-tech.com/stili/avatar_gray.gif)
lukanium ::
Problem je v tem, da je za ta dll uporabljen __cdecl calling convention in ne __stcall. Torej na način, ki je privzet za C(++), VB pa zna brati samo __stdcall, pri čemer moraš pri ustvarjanju dll-ja priključiti še .def file, v katerem enostavano opredeliš/našteješ vse funkcije v dll-ju, ki jih boš potem klical iz VB-ja. Samo na ta način bi naj VB znal pravilno prebrati dll. However...
... Po razbijanju glave ob steno sem ugotovil, da vse skupaj (zaenkrat se tako zdi) normalno dela, če z 'On Error Resume Next'
lepo ignoriraš napako 49 (bad dll calling convention). Trenutno se mi ne da ugotavljati, zakaj dela, ker se mi tako zelo mudi z vsem skupaj, da mi je čisto vseeno. Nisem še vsega temeljito stestiral, tako da zaenkrat dejasnko še ne vem, če je ta rešitev (polno) funkcionalna. Če kdo ve, da tako 'potlačevanje' napake prinese s sabo kake napake, naj prosim pride z besedo na plan!
... Po razbijanju glave ob steno sem ugotovil, da vse skupaj (zaenkrat se tako zdi) normalno dela, če z 'On Error Resume Next'
![:D](https://static.slo-tech.com/smeski/icon_biggrin.gif)
![:)](https://static.slo-tech.com/smeski/icon_smile.gif)
When a person can no longer laugh at himself,
it is time for others to laugh at him. [Thomas Szasz]
it is time for others to laugh at him. [Thomas Szasz]
![](https://static.slo-tech.com/stili/avatar_gray.gif)
darkolord ::
On Error Resume Next preskoči vse stvari, kjer so napake... Torej isto, kot da tega klica sploh ne bi imel...
Drugače, če hočeš samo določeno napako "potlačit", je boljše kaj takega:
Drugače, če hočeš samo določeno napako "potlačit", je boljše kaj takega:
Sub Nekaj() On Error Goto Hell: 'Tukaj je vsebina Exit Sub Hell: If Error.Number = 49 Then Resume Next End If End Sub
![](https://static.slo-tech.com/stili/avatar_gray.gif)
NavadniNimda ::
Lukanium - vzemi si tiste pol ure cajta, pa naredi WRAPPERJE v C-ju, ki so _stdcall in jih zapakiraj v DLL. Nato kličeš ta svoj DLL iz VBja, un pa skrbi da parametre obrne, pokliče originalni DLL, poskrbi za vrnitveno vrednost in popuca stack za sabo.
"No big deal", kot pravijo.
"No big deal", kot pravijo.
![:|](https://static.slo-tech.com/smeski/icon_confused.gif)
![](https://static.slo-tech.com/stili/avatar_gray.gif)
lukanium ::
"No big deal", kot pravijo.
Hm, kak za koga
![;)](https://static.slo-tech.com/smeski/icon_wink.gif)
Vsekakor hvala za predlog.
Maš mogoče kak link? Al pa se ti da sem prilepiti kak zlo enostaven primer takega wrapperja? V C-ju nisem nikoli nič delal :(
Našel sem recimo to, vendar mi ni dovolj razumljivo.
When a person can no longer laugh at himself,
it is time for others to laugh at him. [Thomas Szasz]
it is time for others to laugh at him. [Thomas Szasz]
![](https://static.slo-tech.com/stili/avatar_gray.gif)
lukanium ::
@NavadniNimda: Sva s kolegom malo pogledala po netu in koliko zdaj to razumeva, za kaj takega rabiš specifikacijo strukture podatkov, ki se pošiljajo funkcijam in se vračajo... torej rabim source tega dll-ja? Sprašujem zato, ker ga trenutno sicer nimam, bi se ga pa mogoče dalo dobiti...
When a person can no longer laugh at himself,
it is time for others to laugh at him. [Thomas Szasz]
it is time for others to laugh at him. [Thomas Szasz]
![](https://static.slo-tech.com/stili/avatar_gray.gif)
NavadniNimda ::
Ne, tako kot si hotel klicati iz VB-ja, tako kličeš iz C-ja. Odnosno C++ bo ta prav. Pazi na to, da so recimo STRING tipi v VBju nekoliko drugačni od tistih v C-ju (v VB ni ZERO terminated!), pa tudi recimo INT v VBju je 16-bitna vrednost. Če imaš specifikacijo parametrov za une C funkcije v DLL, gotovo ne sme biti problem tega narest.
Drži pa, da nisem že ene 5 let delal s C++ pod Windowsi!![:8)](https://static.slo-tech.com/smeski/icon_redface.gif)
EDIT:
Ja, Lukanium, un link je ta pravi!!
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q153586
![8-)](https://static.slo-tech.com/smeski/icon_cool.gif)
Drži pa, da nisem že ene 5 let delal s C++ pod Windowsi!
![:8)](https://static.slo-tech.com/smeski/icon_redface.gif)
EDIT:
Ja, Lukanium, un link je ta pravi!!
![:))](https://static.slo-tech.com/smeski/icon_lol.gif)
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q153586
Zgodovina sprememb…
- spremenilo: NavadniNimda ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | serijska za xpOddelek: Pomoč in nasveti | 1261 (1069) | OwcA |
» | sesut search v win XPOddelek: Pomoč in nasveti | 780 (702) | mb |
» | Odstranitev programa Office v celotiOddelek: Programska oprema | 1312 (1236) | LuckyMato |
» | [.NET ali c#] ne najdem dokumentacijeOddelek: Programiranje | 1415 (1261) | atasmrk |
» | Serijske številke pri Windows XP professional!!!!!Oddelek: Pomoč in nasveti | 1525 (1360) | BigBoss |