ABV Posted August 11, 2011 Posted August 11, 2011 Hi All I am trying to call a very simple Dll Created in Labview, the Lv function Has one 16bit integer as an output see LV.Jpg I have build a 'C' style Dll, see Dll.Jpg The function prototype for this DLL is void LVDLL(short *Value) And My code is Local $Mydata Local $Dll = -1 Local $result = -1 $Dll = DllOpen("c:\LVdll.dll") $result = DllCall($Dll,"none","LVdlltest","short *",$Mydata) msgbox(0,"",$result & "," & $Dll & "," & $Mydata) DllClose($dll) Although the returned values all look ok, I get nothing back fom the DLL, I am not sure it has been called If I use $result = DllCall($Dll,"none","LVdlltest","short",$Mydata) It looks like the DLL has been called but autoIt crashes with the failure.jpg I have attached the DLL files in the zip Has any one got any suggestions? ThanksLVdll.zip
jvanegmond Posted August 11, 2011 Posted August 11, 2011 If the function prototype is: void LVDLL(short *Value) Why do you call "LVdlltest" and not "LVDLL"? $result = DllCall($Dll,"none","LVdlltest","short *",$Mydata) No idea if that's it, but it might help to call the correct function. github.com/jvanegmond
ABV Posted August 11, 2011 Author Posted August 11, 2011 If the function prototype is:void LVDLL(short *Value)Why do you call "LVdlltest" and not "LVDLL"?$result = DllCall($Dll,"none","LVdlltest","short *",$Mydata)No idea if that's it, but it might help to call the correct function.Good question'LVDLL' is the name of the DLL, which is a shared library (DLL)'LVdlltest' is the function within the shared library that I want to use, (LVDLL->LVdlltest)
jvanegmond Posted August 11, 2011 Posted August 11, 2011 I've downloaded your attachment and found that AutoIt has a problem opening the dll file. Local $Mydata Local $Dll = -1 Local $result = -1 $Dll = DllOpen("LVdll.dll") ConsoleWrite("Result of DLL open: " & $Dll & @CRLF) $result = DllCall($Dll,"none:cdecl","LVdlltest","short*",$Mydata) ConsoleWrite("Result of DLL call: " & $result & ". Error code: " & @error & @CRLF) DllClose($dll) Result: >Running:(3.3.6.1):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "C:\Users\Jos\Downloads\LVdll\test.au3" Result of DLL open: -1 Result of DLL call: 0. Error code: 1 +>15:54:45 AutoIT3.exe ended.rc:0 A moment later, when I tried to check out the dll from another language, I got an error about needing the LabVIEW Run-Time Engine. Unfortunately, I can't make a reproduction script on this computer. Can you run the script above to check if the dll is being opened correctly? One other important detail: You missed the note about calling cdecl functions. Your prototype is: void __cdecl LVdlltest(short *Numeric); so you must use "none:cdecl" as return type. (Or "int:cdecl" etc.) github.com/jvanegmond
ABV Posted August 11, 2011 Author Posted August 11, 2011 I've downloaded your attachment and found that AutoIt has a problem opening the dll file. Local $Mydata Local $Dll = -1 Local $result = -1 $Dll = DllOpen("LVdll.dll") ConsoleWrite("Result of DLL open: " & $Dll & @CRLF) $result = DllCall($Dll,"none:cdecl","LVdlltest","short*",$Mydata) ConsoleWrite("Result of DLL call: " & $result & ". Error code: " & @error & @CRLF) DllClose($dll) Result: >Running:(3.3.6.1):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "C:\Users\Jos\Downloads\LVdll\test.au3" Result of DLL open: -1 Result of DLL call: 0. Error code: 1 +>15:54:45 AutoIT3.exe ended.rc:0 A moment later, when I tried to check out the dll from another language, I got an error about needing the LabVIEW Run-Time Engine. Unfortunately, I can't make a reproduction script on this computer. Can you run the script above to check if the dll is being opened correctly? One other important detail: You missed the note about calling cdecl functions. Your prototype is: void __cdecl LVdlltest(short *Numeric); so you must use "none:cdecl" as return type. (Or "int:cdecl" etc.) Hi Thanks for looking, I have run the code you suggested with the result >"D:\MoogProg\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\dlltest.au3" Result of DLL open: 1 Result of DLL call: . Error code: 0 >Exit code: 0 Time: 0.747 There appears to be nothing in $result I added the line "ConsoleWrite("Value of $Mydata: " & $Mydata & ". Error code: " & @error & @CRLF)" With the result >"D:\MoogProg\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\dlltest.au3" Result of DLL open: 1 Result of DLL call: . Error code: 0 Value of $Mydata: . Error code: 0 >Exit code: 0 Time: 0.691 $MyData is also empty Thanks
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now