Dll in excel wil niet werken, vewacht expressie?

Status
Niet open voor verdere reacties.

tboerkoel

Gebruiker
Lid geworden
9 jan 2005
Berichten
11
Heay heay

Ik ben bezig met een project voor school. Ik schrijf een "programma" in excel met een stukje visual erachter.

In visual moet ik een dll linken zodat ik via de paralelle poort gegevens kan uitwisselen.
Dit heb ik als volgt gedaan:

c= CALL (laserdll2pas.dll,info,BBBB,x,y,z)

>Mijn DLL heet dus laserdll2pas.dll en staat in de map systeem
>De functie die ik binnen het dll wil gebruiken heet: info.

De functie info neemt 3 argumenten mee, en geft er 1 terug. allemaal van het type integer.

Wanneer ik wil compilen krijg ik de melding:
Compileer fout Verwacht: expressie, en gaat de cursor naar het eeste haakje na CALL.

Weet iemand wat hier niet aan klopt???

Alvast bedankt

Tjarco
 
wel je syntax is wel vrij raar hoor...
Call is een SUB callen, oproepen: Subs geven geen output! dus die c = moet weg

Als er wel een output moet komen moet dat vervangen worden door een functie...
normaal gezien worden functies niet gecalled...

Ik weet niet veel van exel (wil ik ook niet:P) maar dit is wat je in VB zou moeten krijgen:

Declare Function info Lib "laserdll2pas.dll" Alias "dunno" (byval blabla as blabla....) as whatever

c = info(en de rest)
 
heay heay ehay

Jah daar kwam ik vandaag ook toch nog achter dat het een beetje anders moest
Had die vage via internet gevonden.

Ik heb nu deze:
Code:
Private Declare Function info Lib "laserdll2pas.dll" (ByVal a, b, c As Byte) As Byte
 .
 .
 .
g = info(65, 66, 67)

Maar krijg een foutmelding: could not load library..
 
Staat die dll geregistreerd? Staat ie in het huidige pad? Anders moet je hem wellicht met het volledige pad aanroepen.


Grtz,
 
heay heaay

Of ik hem in t zelde pad heb? als...

Ikheb hem gezet in:

windows\system
windows\system32
Microsoft Office\OFFICE11
Microsoft Office\OFFICE11\1033
Microsoft Office\OFFICE11\VS Runtime
en hetzelfde pad als waar m'n excel/visual bestand staat..

Maar hij ziet hem niet :evil:


Code:
Private Declare Function info Lib "laserdll2pas.dll" (ByVal a As Integer, b As Integer, c As Integer) As Integer
  .
  .
  .
g = info(65, 66, 67)
Naar m'n dll worden alleen hele waarden gegeven van 0 tot 255, en het geeft een "1" of een "0" terug.

Zou je denken dat het zo goed zat maar...

Groetjes tjar
 
Laatst bewerkt:
ok... als alles wat je zegt waar is kan het ook zijn dat hij mss de dll wel vind, maar niet die functie erin...
Zeker dat die goed zit?
 
Code:
library laserdll2pas;

uses
  SysUtils,clause;


{$R *.RES}
Function info(x,y,z:integer):integer; export; stdcall;
var count;
begin
 for count:= 1 to 4 do
  begin
    if count = 1 do     {x waarde naar dac 1}
     begin
         Out32(378h,x);stdcall;external InpOut32;
         delay(10);
         Out32(37ah,(inp32(37ah) OR $02);stdcall;external InpOut32;
         Out32(37ah,(inp32(37ah) AND $02);stdcall;external InpOut32;
     end;
    if count = 2 do     {y waarde naar dac 2}
     begin
         Out32(378h,y);stdcall;external InpOut32;
         delay(10);
         Out32(37ah,(inp32(37ah) OR $04);stdcall;external InpOut32;
         Out32(37ah,(inp32(37ah) AND $04);stdcall;external InpOut32;
     end;
    if count = 3 do     {z waarde naar laser }
     begin
         Out32(378h,z);stdcall;external InpOut32;
         delay(10);
         Out32(37ah,(inp32(37ah) OR $08);stdcall;external InpOut32;
         Out32(37ah,(inp32(37ah) AND $02);stdcall;external InpOut32;
     end;
    if count = 4 do     {clock Dac 1+2 door}
     begin
         Out32(378h,x);stdcall;external InpOut32;
         delay(10);
         Out32(37ah,(inp32(37ah) OR $01);stdcall;external InpOut32;
         Out32(37ah,(inp32(37ah) AND $01);stdcall;external InpOut32;
     end;

     exports
     info;
end.

zoals je ziet, hij zit erin..
En het inpout32.dll zit er ook netjes bij. wat eigenlijk niet zou uit maken..

Het is beetje drama zo :confused:
 
mss probere te debuggen?
ik weet het niet hoor:)

je kan normaal een lijn stoppe door er een rood bolletje voor te zette... Zet dat is voor die call van dll, mss dat dat helpt
 
heay heay heay

Noujah, het stuk programma doet het wel als ik eem commatje ' zet voor de regel waar ik het dll wil gebruiken:
Code:
 '    g = info(x, y, z)
Zodra ik dit stukje zonder da commatje erin zet breekt de hel los..:mad:

x,y,z zijn integers in vb en in m'n dll..
Snap er geen hout meer van.. echt alles zit tegen met da * project

Zelfs als ik de het hele pad aangeef waar het dll staat krijg ik nu weer dat hij het dll niet vinden kan :S
 
Laatst bewerkt:
ow, als wat je zegt waar is dan ligt het aan de slechte programmatie van de dll...
 
dankje, heb m zelf geschreve :S hihi
Alleen kreeg ik bij het compilen van het programma, met delphi dll wizard, geen foutmeldingen.

Volgens delphi is het programma goed, en volgens me docent ook..

Wat zou er fout zijn aan het dll??

groetjes tjar
 
Onderstaande dll aanroep heb ik van www.mvps.org/access gehaald. Wellicht dat je de functie eerst moet declareren voordat het werkt?

Code:
Declare Function aht_apiGetOpenFileName Lib "comdlg32.dll" _
    Alias "GetOpenFileNameA" (OFN As tagOPENFILENAME) As Boolean


Grtz,
 
hij is boven aan in hetzelfde blad als dat de dll wordt aangeroepen gedeclareerd:
Code:
Private Declare Function info Lib "laserdll2pas.dll" (ByVal a As Integer, b As Integer, c As Integer) As Integer
  .
  .
  .
g = info(65, 66, 67)
 
K heb een programma gedownload: dependency walker. die loopt alle programmas en dlls door en kijkt of alle bestanden die erbij horen niet missen.
Ik kreeg deze foutmelding:

Error: At least one file was not a 32-bit or 64-bit Windows module.

wtf?
 
Geplaatst door tboerkoel
Maar krijg een foutmelding: could not load library..
Hai, :D

Totaal geen ervaring met zelf geschreven/gecompilde DLL's...maar wel met heel veel bestaande DLL's gewerkt!

Jou error komt in mijn ervaring alleen voor als je jou DLL niet bij Windows hebt geregistreerd! (in het register)

De normale locatie voor een DLL is System32 map en je registreerd hem met: 'regsvr32' (Unregsvr als je hem niet meer nodig hebt) Of te wel De compiler kan hem niet vinden in het register...

Voor de rest heb ik het topic niet gevolgd maar dit is mijn ervaring met programeren met DLL's...

De Declare Function statement ziet er normaal uit. (Hoort HELEMAAL BOVENIN de code te staan bij alle Options en andere declaraties/dim statements!)

Voor een goede debugging zet je bovenaan je code Option Explicit (Dit dwingt jou je variabelen te declareren..zo te zien doe je dat nog niet)

Wanneer je dan in menu foutopsporing op compileren drukt krijg je te zien wat de VBE van jou code vindt!

Succes! :thumb:
 
ik zou eens die DLL hercompilen met een ander programma... Ik denk dat jou dll niet echt opgenomen kan worden in het register, en via dat testje van jou zie je dat de dll wel gevonden wordt, maar niet juist gelezen..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan