btjacker Posted April 2, 2016 Share Posted April 2, 2016 Hi, I have been using AutoIT only for two days and the main reason is DllCall feature. But I have issue with procedure which needs Byte as parameter. #include <MsgBoxConstants.au3> #include <Array.au3> This works OK: $calldata=DllCall("C:\rv.dll","none","rvgetroavg","double","-10","double","80","double","8","double","20", "double", "101325","double*","","boolean*", "") MsgBox($MB_SYSTEMMODAL, "rvgetroavg", _ArrayToString($calldata, @CRLF)) $calldata=DllCall("C:\rv.dll","none","rvgetw","double","1500","double","500","boolean", "False","double*","","double*","","boolean*", "") MsgBox($MB_SYSTEMMODAL, "rvgetw", _ArrayToString($calldata, @CRLF)) But procedures using "Byte" doesnt work, for example: $calldata=DllCall("C:\rv.dll","none","rvgetdP","double","2","double","1","byte","0","byte","0", "boolean", "True","boolean","True","double*", "","boolean*", "") MsgBox($MB_SYSTEMMODAL, "rvgetdPnew", _ArrayToString($calldata, @CRLF)) In DLL documentation is written: rvgetdP(w,ro:double;d200,mat,enthalpic:byte; var dP: double;var chyba: boolean);stdcall; Thank you for help. rv.dll Link to comment Share on other sites More sharing options...
AndyG Posted April 3, 2016 Share Posted April 3, 2016 8 hours ago, btjacker said: This works OK: $calldata=DllCall("C:\rv.dll","none","rvgetroavg","double","-10","double","80","double","8","double","20", "double", "101325","double*","","boolean*", "") MsgBox($MB_SYSTEMMODAL, "rvgetroavg", _ArrayToString($calldata, @CRLF)) $calldata=DllCall("C:\rv.dll","none","rvgetw","double","1500","double","500","boolean", "False","double*","","double*","","boolean*", "") MsgBox($MB_SYSTEMMODAL, "rvgetw", _ArrayToString($calldata, @CRLF)) Should not, because "8" or "101325" is definitely NOT a double, it is STRING (char). And "False" is not a boolean, but False is. Examining the dll with IDA shows: expandcollapse popup; Attributes: bp-based frame public rvgetw rvgetw proc near var_18= qword ptr -18h var_10= qword ptr -10h var_8= qword ptr -8 arg_0= qword ptr 8 arg_8= qword ptr 10h arg_10= byte ptr 18h arg_14= dword ptr 1Ch arg_18= dword ptr 20h arg_1C= dword ptr 24h push ebp mov ebp, esp add esp, 0FFFFFFE8h push ebx mov ebx, [ebp+arg_1C] mov edx, [ebp+arg_18] mov ecx, [ebp+arg_14] xor eax, eax mov dword ptr [ebp+var_8], eax mov dword ptr [ebp+var_8+4], eax xor eax, eax mov dword ptr [ebp+var_10], eax mov dword ptr [ebp+var_10+4], eax xor eax, eax mov dword ptr [ebp+var_18], eax mov dword ptr [ebp+var_18+4], eax mov byte ptr [ebx], 0 fld [ebp+arg_0] fcomp flt_412370 fnstsw ax sahf jbe short loc_41211F Your problem is not the dll nor AutoIt, your problem is not to know how to work with a dll, irrelevant which computer-language you choose.... Link to comment Share on other sites More sharing options...
btjacker Posted April 3, 2016 Author Share Posted April 3, 2016 Thanks for reply, ok I admit, I have no idea how to work with Dll. I just know, that I have to call it with parameters and get a result. This Dll should just return values of heat exchangers based on values provided in DllCall function. Nothing more. If it is possible to do this in AutoIt, could your (or anyone) please rewrite the last DllCall function in first post? Thank you Link to comment Share on other sites More sharing options...
Danyfirex Posted April 3, 2016 Share Posted April 3, 2016 Share doc. Saludos Danysys.com AutoIt... UDFs: VirusTotal API 2.0 UDF - libZPlay UDF - Apps: Guitar Tab Tester - VirusTotal Hash Checker Examples: Text-to-Speech ISpVoice Interface - Get installed applications - Enable/Disable Network connection PrintHookProc - WINTRUST - Mute Microphone Level - Get Connected NetWorks - Create NetWork Connection ShortCut Link to comment Share on other sites More sharing options...
btjacker Posted April 3, 2016 Author Share Posted April 3, 2016 Here is a part about rvgetdP procedure. Docu is also attached. Thank you for your time. 3.2 procedure rvgetdP(w,ro:double;d200,mat,enthalpic:byte; var dP:double;var chyba: boolean);stdcall; parameter dimension type comment w [m/s] double Air velocity at the cross-section of air flow – use the result returned by rvgetw function. ro [kg/m3] double Average air density at given pressure in actual temperature and humidity range. For determining this parameter you can use rvgetroavg function, which will be described below. d200 [ - ] byte Determines the wave height / rotor depth in millimetres: 2.3/250 mm => d200=0 1.9/200 mm => d200=1 1.6/200 mm => d200=2 1.4/200 mm => d200=3 mat [ - ] byte Determines the material of the enthalpy layer in case of exchanger with humidity transfer function. 0 - T–without enthalpy layer 1 - ES,SS–enthalpy layer based on silicon 2 - EZ–enthalpy layer based on molecular sieves enthalpic [ - ] byte Determines the surface of enthalpy layer application 0 - T - without enthalpy layer 1 –these types are not produced any more 2 - ES, EZ–application on wavymetal sheet 3 - SS–application on all surfaces dP [Pa] double Return parameter determining the pressure loss chyba [true/false] boolean Return parameter specifying the credibility of the result. True – non-credible result False – there occurred no error during the calculation doc_rv.docx Link to comment Share on other sites More sharing options...
jchd Posted April 3, 2016 Share Posted April 3, 2016 Something like that? Local $calldata = DllCall("C:\rv.dll", "none", "rvgetdP", _ "double", 2., _ ; w "double", 1., _ ; ro "byte", 0, _ ; d200 2.3/250 mm "byte", 0, _ ; mat 0 - T - without enthalpy layer "byte", 0, _ ; enthalpic 0 - T - without enthalpy layer "double*", 0, _ ; dP return value "boolean*", 0) ; chyba return value If @error Then ; process DllCall error EndIf This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
btjacker Posted April 4, 2016 Author Share Posted April 4, 2016 I am useless, there was also mistake in count of parameters... Thank you for help guys. I Hope next time when i come to ask for help it will be something less stupid:) Link to comment Share on other sites More sharing options...
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