corgano Posted May 15, 2009 Posted May 15, 2009 One thing led to another, and eventually I found thease 2 direct ui files. one is an example, the other is the sorce (But I don't know C++). I want to learn to use dllcall() but I can't figure it out. I want to use some of the functions and effects shown in the example. Please see attached files. Help with this or a C++ to autoit converter would be nice. 0x616e2069646561206973206c696b652061206d616e20776974686f7574206120626f64792c20746f206669676874206f6e6520697320746f206e657665722077696e2e2e2e2e
MattyD Posted May 16, 2009 Posted May 16, 2009 (edited) If you could choose a specific function in the dll you want to call and post how it is defined (it'll be in one of those header files) It'd be a great help. Otherwise I can post part of a project I'm working on and explain how DllCall() works... (or a third option would be to wait for someone who knows C++ and can help you more directly I spose) Cheers, Matt Edited May 16, 2009 by MattyD
corgano Posted May 16, 2009 Author Posted May 16, 2009 If you could choose a specific function in the dll you want to call and post how it is defined (it'll be in one of those header files) It'd be a great help. Otherwise I can post part of a project I'm working on and explain how DllCall() works... (or a third option would be to wait for someone who knows C++ and can help you more directly I spose)Cheers,MattIf you looked at the example, doing anything (like the animated stuff) would be cool. I also like the second choice. 0x616e2069646561206973206c696b652061206d616e20776974686f7574206120626f64792c20746f206669676874206f6e6520697320746f206e657665722077696e2e2e2e2e
MattyD Posted May 16, 2009 Posted May 16, 2009 Okeydoke - if you feel i'm hijacking your thread please let me know... (not much to do with animation im sorry) It requires the Windows Zero Configuration service to be running Lesson 1 - simple dll call (opening a handle to control a wireless card) CODE#cs From wlanapi.h DWORD WINAPI WlanOpenHandle( __in DWORD dwClientVersion, __reserved PVOID pReserved, __out PDWORD pdwNegotiatedVersion, __out PHANDLE phClientHandle ); First DWORD is the return data type #ce ;If DllOpen() has not been called then the dll will close again after the call. Try moving line 27 to 44 and watch the output ;In this case DllOpen() is only nescessay to access more than 1 wlan handle DllCall("WlanAPI.dll", _ ;Name of the dll to call OR dll handle returned by DllOpen() "dword", _ ;Return data type "WlanOpenHandle", _ ;Name of the function to call in the dll "dword", 1, _ ;paramater 1 - DWORD dwClientVersion - value is defined in MSDN documentation (1 XP, 2 VISTA) "ptr", 0, _ ;paramater 2 - PVOID pReserved - value of 0 (because it is reserved) - technically ptr can be interchanged with hwnd and dword as they are all 32 bit integers-> See Ln 37 "dword*", 0, _ ;paramater 3 - PDWORD pdwNegotiatedVersion - dword by reference (pointer to a dword) "hwnd*", 0) ;paramater 4 - PHANDLE phClientHandle - handle by reference (pointer to a handle) ;-------------------------------------------------------------------------------------------------------- $DLL = DllOpen("WlanAPI.dll") ; Try moving this line to line 44 $aCall = DllCall("WlanAPI.dll", "dword", "WlanOpenHandle", "dword", 1, "ptr", 0, "dword*", 0, "hwnd*", 0) ConsoleWrite("Ret: " & $aCall[0] & @CRLF) ;- Return value ConsoleWrite("i_para1: " & $aCall[1] & @CRLF) ;- dwClientVersion ConsoleWrite("r_para2: " & $aCall[2] & @CRLF) ;- pReseved ConsoleWrite("o_para3: " & $aCall[3] & @CRLF) ;- pdwNegotiatedVersion ConsoleWrite("o_para4: " &$aCall[4] & @CRLF) ;- phClientHandle ConsoleWrite(@CRLF) $aCall = DllCall("WlanAPI.dll", "dword", "WlanOpenHandle", "ptr", 1, "dword", 0, "hwnd*", 0, "ptr*", 0);data types switched! ConsoleWrite("Ret: " & $aCall[0] & @CRLF) ConsoleWrite("i_para1: " & $aCall[1] & @CRLF) ConsoleWrite("r_para2: " & $aCall[2] & @CRLF) ConsoleWrite("o_para3: " & $aCall[3] & @CRLF) ConsoleWrite("o_para4: " &$aCall[4] & @CRLF) ConsoleWrite(@CRLF) $aCall = DllCall($DLL, "dword", "WlanOpenHandle", "dword", 1, "ptr", 1, "dword*", 0, "hwnd*", 0) ;returns error code 87 (invalid parameter) because pVOID is not NULL ConsoleWrite("Ret: " & $aCall[0] & @CRLF) ConsoleWrite("i_para1: " & $aCall[1] & @CRLF) ConsoleWrite("r_para2: " & $aCall[2] & @CRLF) ConsoleWrite("o_para3: " & $aCall[3] & @CRLF) ConsoleWrite("o_para4: " &$aCall[4] & @CRLF)
corgano Posted May 16, 2009 Author Posted May 16, 2009 (edited) Okeydoke - if you feel i'm hijacking your thread please let me know... (not much to do with animation im sorry) It requires the Windows Zero Configuration service to be running Lesson 1 - simple dll call (opening a handle to control a wireless card) CODE#cs From wlanapi.h DWORD WINAPI WlanOpenHandle( __in DWORD dwClientVersion, __reserved PVOID pReserved, __out PDWORD pdwNegotiatedVersion, __out PHANDLE phClientHandle ); First DWORD is the return data type #ce ;If DllOpen() has not been called then the dll will close again after the call. Try moving line 27 to 44 and watch the output ;In this case DllOpen() is only nescessay to access more than 1 wlan handle DllCall("WlanAPI.dll", _ ;Name of the dll to call OR dll handle returned by DllOpen() "dword", _ ;Return data type "WlanOpenHandle", _ ;Name of the function to call in the dll "dword", 1, _ ;paramater 1 - DWORD dwClientVersion - value is defined in MSDN documentation (1 XP, 2 VISTA) "ptr", 0, _ ;paramater 2 - PVOID pReserved - value of 0 (because it is reserved) - technically ptr can be interchanged with hwnd and dword as they are all 32 bit integers-> See Ln 37 "dword*", 0, _ ;paramater 3 - PDWORD pdwNegotiatedVersion - dword by reference (pointer to a dword) "hwnd*", 0) ;paramater 4 - PHANDLE phClientHandle - handle by reference (pointer to a handle) ;-------------------------------------------------------------------------------------------------------- $DLL = DllOpen("WlanAPI.dll") ; Try moving this line to line 44 $aCall = DllCall("WlanAPI.dll", "dword", "WlanOpenHandle", "dword", 1, "ptr", 0, "dword*", 0, "hwnd*", 0) ConsoleWrite("Ret: " & $aCall[0] & @CRLF) ;- Return value ConsoleWrite("i_para1: " & $aCall[1] & @CRLF) ;- dwClientVersion ConsoleWrite("r_para2: " & $aCall[2] & @CRLF) ;- pReseved ConsoleWrite("o_para3: " & $aCall[3] & @CRLF) ;- pdwNegotiatedVersion ConsoleWrite("o_para4: " &$aCall[4] & @CRLF) ;- phClientHandle ConsoleWrite(@CRLF) $aCall = DllCall("WlanAPI.dll", "dword", "WlanOpenHandle", "ptr", 1, "dword", 0, "hwnd*", 0, "ptr*", 0);data types switched! ConsoleWrite("Ret: " & $aCall[0] & @CRLF) ConsoleWrite("i_para1: " & $aCall[1] & @CRLF) ConsoleWrite("r_para2: " & $aCall[2] & @CRLF) ConsoleWrite("o_para3: " & $aCall[3] & @CRLF) ConsoleWrite("o_para4: " &$aCall[4] & @CRLF) ConsoleWrite(@CRLF) $aCall = DllCall($DLL, "dword", "WlanOpenHandle", "dword", 1, "ptr", 1, "dword*", 0, "hwnd*", 0) ;returns error code 87 (invalid parameter) because pVOID is not NULL ConsoleWrite("Ret: " & $aCall[0] & @CRLF) ConsoleWrite("i_para1: " & $aCall[1] & @CRLF) ConsoleWrite("r_para2: " & $aCall[2] & @CRLF) ConsoleWrite("o_para3: " & $aCall[3] & @CRLF) ConsoleWrite("o_para4: " &$aCall[4] & @CRLF) I am on a pc. No wireless card........ There is a dll in one of the attachments on the op. How would I use dllcall() on that? Edited May 16, 2009 by corgano 0x616e2069646561206973206c696b652061206d616e20776974686f7574206120626f64792c20746f206669676874206f6e6520697320746f206e657665722077696e2e2e2e2e
ProgAndy Posted May 16, 2009 Posted May 16, 2009 (edited) You can't. I looked at the source and saw that the DLL uses classes. This is possible in C++, but AutoIt can not use calsses exportet from DLLs. Only plain functions are supported. Edited May 16, 2009 by ProgAndy *GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes
corgano Posted May 16, 2009 Author Posted May 16, 2009 You can't.I looked at the source and saw that the DLL uses classes. This is possible in C++, but AutoIt can not use calsses exportet from DLLs. Only plain functions are supported.aww.......Dam. If this is ever added they coulf use this to add direct UI support / functions. Maby some day.......if someone knew about c++ and dll's, they may be able to convert it and write a dll useing resorce viewer 0x616e2069646561206973206c696b652061206d616e20776974686f7574206120626f64792c20746f206669676874206f6e6520697320746f206e657665722077696e2e2e2e2e
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