 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
eddie Član

Pridružen-a: Sre 10 Dec 2003 21:02 Prispevkov: 723 Aktiv.: 3.04 Kraj: Severna primorska
|
Objavljeno: Tor Feb 12, 2013 8:41 am Naslov sporočila: Excel vba makroji in kompatibilnost na različnih verzijah |
|
|
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 |
|
 |
eddie Član

Pridružen-a: Sre 10 Dec 2003 21:02 Prispevkov: 723 Aktiv.: 3.04 Kraj: Severna primorska
|
Objavljeno: Tor Feb 12, 2013 2:42 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|