www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Excel vba makroji in kompatibilnost na različnih verzijah

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> MS Windows razprave
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 723
Aktiv.: 3.04
Kraj: Severna primorska

PrispevekObjavljeno: Tor Feb 12, 2013 8:41 am    Naslov sporočila:  Excel vba makroji in kompatibilnost na različnih verzijah Odgovori s citatom

Pozdravljeni!

V Excelu 2010 32 bit sem s pomočjo API funkcij izvedel komunikacijo preko serijskega 232 porta. Na moji verziji zadeva zelo lepo deluje, ko pa excelov dokument preselim na drug računalnik z drugo verzijo excela pa se pričnejo težave.
Prihaja do napak pri "prevajanju" kode.
Začel sem brskati po internetu in našel ogromno informacij glede te problematike. Kakor sem uspel razbrati se težave začnejo ali zaradi 64 bitnega operacijskega sistema ali 64 bitnega excela. Tukaj posredi je pa še Vba7, ki je prisoten od verzije 2010(?) dalje. Težave se pojavijo, če se uporablja zunanje knjižnice - API.
V glavnem cela štrena...

Prebral sem, da je potrebno spremeniti deklaracije teh funkcij.
Link

Če je treba, je treba... pa sem se lotil.
Microsoft je pripravil nekaj dokumentacije na to temo:
Link

V eni txt datoteki so spisane vse nove deklaracije raznoraznih funkcij...

Dobro, zamenjam deklaracije ampak se pojavijo težave naprej v kodi s klicem funkcij..
Ustavilo se mi je pri eni od funkcij, ki je ne znam pravilno spremeniti. Originalna deklaracija funkcije in uporaba v programu sta bili taki:

Koda:
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _
    (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, _
    ByVal dwShareMode As Long, lpSecurityAttributes As Any, _
    ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, _
    ByVal hTemplateFile As Long) As Long


' Open serial port.
    udtPorts(intPortID).lngHandle = CreateFile(strPort, GENERIC_READ Or _
        GENERIC_WRITE, 0, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)


Nova deklaracija je takale:

Koda:
Declare PtrSafe Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As LongPtr) As LongPtr


SECURITY_ATTRIBUTES izgledajo tako:


Koda:
Stari:
Private Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long
End Type


Novi:
Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As LongPtr
        bInheritHandle As Long
End Type


Napaka, ki se javi je: "User defined type may not be passed ByVal".

Ne znam ga prepričat, da bi tole šlo skozi.
Ima kdo kaj izkušenj s podobnimi stvarmi?

Hvala in lp.

EDIT: Še tole - napaka kaže na 4 parameter funkcije, kjer so "SECURITY_ ATTRIBUTE - i.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 723
Aktiv.: 3.04
Kraj: Severna primorska

PrispevekObjavljeno: Tor Feb 12, 2013 2:42 pm    Naslov sporočila:   Odgovori s citatom

Se ni še nihče ukvarjal s podobnim ali vprašanje ni ravno razumljivo? Verjetno to zadnje...
Torej problem je pri klicu naslednje funkcije:
Koda:
' Open serial port.
    udtPorts(intPortID).lngHandle = CreateFile(strPort, GENERIC_READ Or _
        GENERIC_WRITE, 0, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)


In sicer javi napako pri parametru, ki je podan kot "ByVal 0&"

Kaj bi moral vnesti namesto tega? Ta parameter je v novi deklaraciji funkcije tipa "SECURITY_ATTRIBUTE", prej pa je bil tipa Any.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> MS Windows razprave Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 9 dni


Powered by phpBB © 2001, 2005 phpBB Group