Sure did Michael.
Thanks for your help.
I got confused when the statement about the using part of call dword required
a declare statement. I was thinking "why use loadlibrary if you have to declare it anyway??? but then you explained that too.
Announcement
Collapse
No announcement yet.
loadlibrary woes
Collapse
X
-
I'm glad it's working.
BTW...
>added subs prntjrnl and printledger to program
I'll bet it made your life a whole lot easier to put this 'call' code in little separate procedures like this instead of 'burying' the required code it in-line, didn't it?
Leave a comment:
-
-
In declares
Code:DECLARE SUB printledger (c$,d$,xxp%) DECLARE SUB prntjrnl (coid$,devi$)
Code:SELECT CASE CBCTL CASE %ID_JOURNAL 'print journal CLOSE savecoid$=coid$ xpt$="FJP" 'from Journal Posting prntjrnl savecoid$,xpt$ . . . CASE %ID_LEDGER 'print ledger CLOSE savecoid$=coid$ xpt$="FJP" 'from Journal Posting xxp%=1 printledger savecoid$,xpt$,xxp% . . .
Code:SUB printledger (c$,d$,xxp%) ghInst = findwindow(BYVAL 0,"Client Writeup Menu Version 3.10X") IF ghInst THEN sLibname="wurptxp.dll" szlib=slibname hLib=loadlibrary(szlib) lAddress = GetProcAddress(hLib, "PRINTLEDGER") xxp%=1 CALL DWORD lAddress USING printledger(c$,d$,xxp%) 'TO lResult2 FreeLibrary hLib ELSE sLibname="wurpt1.dll" szlib=slibname hLib=loadlibrary(szlib) lAddress = GetProcAddress(hLib, "PRINTLEDGER") xxp%=1 CALL DWORD lAddress USING printledger(c$,d$,xxp%) 'TO lResult2 FreeLibrary hLib END IF END SUB SUB prntjrnl (c$,dv$) ghInst = findwindow(BYVAL 0,"Client Writeup Menu Version 3.10X") IF ghInst THEN sLibname="wurptxp.dll" szlib=slibname hLib=loadlibrary(szlib) lProcname="PRNTJRNL" lAddress = GetProcAddress(hLib, "PRNTJRNL") lprocname="prntjrnl" CALL DWORD lAddress USING prntjrnl(c$,dv$) 'TO lResult2 FreeLibrary hLib ELSE sLibname="wurpt1.dll" szlib=slibname hLib=loadlibrary(szlib) lAddress = GetProcAddress(hLib, "PRNTJRNL") xxp%=1 CALL DWORD lAddress USING prntjrnl(c$,dv$) 'TO lResult2 FreeLibrary hLib END IF END SUB
Leave a comment:
-
-
>CALL DWORD lAddress USING printledger(savecoid$,xpt$,xxp%)
Show DECLARE for printledger and printledger2
Also, do you get back a non-null "laddress?" You really should test for that.
Leave a comment:
-
-
OK got it to compile.
in declares
Code:DECLARE SUB printledger (c$,d$,xxp%) DECLARE SUB prntjrnl (coid$,devi$)
Code:IF ghInst THEN sLibname="wurptxp.dll" szlib=slibname hLib=loadlibrary(szlib) lAddress = GetProcAddress(hLib, "printledger") xxp%=1 CALL DWORD lAddress USING printledger2(savecoid$,xpt$,xxp%) FreeLibrary hLib ELSE sLibname="wurpt1.dll" szlib=slibname hLib=loadlibrary(szlib) lAddress = GetProcAddress(hLib, "printledger") xxp%=1 CALL DWORD lAddress USING printledger(savecoid$,xpt$,xxp%) FreeLibrary hLib 'CALL printledger(savecoid$,xpt$,1) END IF
No, get a gpf when i try to access it.
Got it to work. Had several errors.
My ghinst was looking for program name instead of window title. got that fixed
lAddress was coming up 0 -- needed uppercase.
added subs prntjrnl and printledger to program
called them from callback
then within prntjrnl or printledger did the call dword and other statements (instead of in callback)
Now it calls them ok.Last edited by Fred Buffington; 19 Oct 2007, 03:08 PM.
Leave a comment:
-
-
ok thanks michael.
I'll try that.
I do have the 8.04 (and 4.04 cc).
Im still using 6.02 though. actually using both 6 and 8.
Oh, thanks once again for your quick response.
Leave a comment:
-
-
If you are using CALL DWORD USING you do not include the "LIB" or "ALIAS" clauses in your DECLARE.
FWIW, PB/Win 8x supports shared aliases. If you were thinking an upgrade might do you some good... in this case it would let you use DECLARE ..LIB...ALIAS and eschew LoadLibrary/GetProcAddress/CALL DWORD entirely.
MCM
Leave a comment:
-
-
I was using a declare when i had just the one procedure but now i have
2 procedures called the same thing in different dlls so the declare wont work.
So, i thought i could use loadlibrary instead.
I originally tried
DECLARE SUB prntjrnl LIB "WURPT1.DLL" ALIAS "PRNTJRNL" (coid$,devi$)
DECLARE SUB prntjrnl2 LIB "WURPTXP.DLL" ALIAS "PRNTJRNL" (coid$,devi$)
but of course that is a naming convention problem.
Maybe i could declare it in winmain something like
Code:IF ghinst THEN DECLARE SUB prntjrnl2 LIB "WURPTXP.DLL" ALIAS "PRNTJRNL" (coid$,devi$) ELSE DECLARE SUB prntjrnl LIB "WURPT1.DLL" ALIAS "PRNTJRNL" (coid$,devi$) END IF
No that doesnt work, cant declare inside a function/subLast edited by Fred Buffington; 19 Oct 2007, 12:56 PM.
Leave a comment:
-
-
> points to PRNTJRNL after the USING
When the USING clause of the CALL DWORD statement is used, a DECLARE statementfor the called procedure (PRNTJRNL) is required.
Missing? Or simply not shown?
Leave a comment:
-
-
loadlibrary woes
I've had to go to a loadlibrary rather than declare in one of my programs because i have 2 dlls
with similar procedures (named the same) with same result but achieved through different means. To be specific, they are print programs 1 uses
dllprint for preview/print the other uses xprint/graphic for preview/print.
Im getting an error in my program compiled in pbdll6+ on the call dword line.
Code:GLOBAL szLib AS ASCIIZ * 128 GLOBAL hLib AS DWORD GLOBAL sLibname AS STRING GLOBAL lAddress AS DWORD GLOBAL lResult2 AS LONG GLOBAL procname AS STRING ... ... (in a dialog callback i have) CASE %ID_JOURNAL 'print journal CLOSE savecoid$=coid$ xpt$="FJP" 'from Journal Posting ghInst = GetModuleHandle("wumenuw3.exe") ' IF ghInst THEN ' LOCAL szLib AS ASCIIZ * 128 ' LOCAL hLib AS DWORD ' LOCAL sLibname AS STRING ' LOCAL lAddress AS DWORD ' LOCAL lResult2 AS LONG ' LOCAL lProcname AS STRING ' lProcname="printjrnl" IF ghInst THEN sLibname="wurptxp.dll" szlib=slibname hLib=loadlibrary(szlib) lAddress = GetProcAddress(hLib, "prntjrnl") procname="prntjrnl" CALL DWORD lAddress USING prntjrnl (savecoid$,xpt$,1) TO lResult2 FreeLibrary hLib ELSE sLibname="wurpt1.dll" szlib=slibname hLib=loadlibrary(szlib) lAddress = GetProcAddress(hLib, "prntjrnl") CALL DWORD lAddress USING prntjrnl (savecoid$,xpt$,1) TO lResult2 FreeLibrary hLib END IF
Error 516: .... default type id(?$....) or AS required PRNTJRNL
it points to PRNTJRNL after the USING
I've tried using prntjrnl in quotes, defining procname as string and using procname, but the error persists. Got to be something simple im missing.Tags: None
-
Leave a comment: