About Monkey 2 › Forums › Monkey 2 Programming Help › Simple Win32 API call attempt
This topic contains 4 replies, has 2 voices, and was last updated by
DruggedBunny
1 year, 3 months ago.
-
AuthorPosts
-
April 22, 2017 at 12:03 pm #7997
Hi all,
Just having a little play with mx2, was hoping to get a really simple Win32 API call working, but it’s falling down somewhere… but I don’t know if I’m approaching it correctly…
Monkey12345678910111213#Import "<libuser32.a>"ExternFunction MessageBoxA:Int (hWnd:Int, lpText:CString, lpCaption:CString, uType:Int)PublicFunction Main:Void ()MessageBoxA (Null, "Test", "Test", 0)EndThis fails with:
Monkey1234567891011121314151617181920212223242526Mx2cc version 1.1.04***** Building app 'I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/tmp/untitled1.monkey2' *****Parsing...Semanting...Translating...Compiling...Build error: System command 'g++ -I"I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/modules/" -I"I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/modules/monkey/native" -I"I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/tmp/" -std=c++11 -m32 -c -o "I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/tmp/untitled1.buildv1.1.04/windows_debug/build/_1src_2untitled1_0untitled1.cpp.o" "I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/tmp/untitled1.buildv1.1.04/windows_debug/src/untitled1_untitled1.cpp"' failed.g++ -I"I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/modules/" -I"I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/modules/monkey/native" -I"I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/tmp/" -std=c++11 -m32 -c -o "I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/tmp/untitled1.buildv1.1.04/windows_debug/build/_1src_2untitled1_0untitled1.cpp.o" "I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/tmp/untitled1.buildv1.1.04/windows_debug/src/untitled1_untitled1.cpp"I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/tmp/untitled1.buildv1.1.04/windows_debug/src/untitled1_untitled1.cpp: In function 'void bbMain()':I:/SpiderOak/DevTools/Monkey2/Monkey2-v1.1.04/tmp/untitled1.buildv1.1.04/windows_debug/src/untitled1_untitled1.cpp:13:87: error: 'MessageBoxA' was not declared in this scopeMessageBoxA(0,bbCString(bbString(L"Test",4)),bbCString(bbString(L"Test",4)),bbInt(0));^***** Fatal mx2cc error *****Internal mx2cc build errorAfter much playing about, I think it’s picking everything up, as in the import seems to be working (various alternatives gave import errors before), the Extern appears OK to me, assuming my Ints translate to the native parameters — which looks to be happening based on “MessageBoxA(0,bbCString(bbString(L”Test”,4)),bbCString(bbString(L”Test”,4)),bbInt(0));”.
The error seems to suggest that Main can’t see MessageBoxA, which I don’t really understand.
Can’t find any search results that cover this particular use of Extern…
Not sure if this is a bug, or if I’m just missing something important/doing something stupid?
April 22, 2017 at 10:45 pm #8007Close…you’re just missing #Import “<windows.h>”, ie:
Monkey123456789101112131415#Import "<libuser32.a>"#Import "<windows.h>"ExternFunction MessageBoxA:Int (hWnd:Int, lpText:CString, lpCaption:CString, uType:Int)PublicFunction Main:Void ()MessageBoxA (Null, "Test", "Test", 0)EndApril 23, 2017 at 8:58 am #8018Ah, interesting! Thanks, Mark!
January 7, 2018 at 12:59 am #12719This no longer builds here (your code), gving a load of output I don’t really understand! Just ran into it while trying to do something else (around 6 hours trying to debug Ted2Go debugger crashes!)…
Monkey1234567891011121314151617181920212223242526272829303132333435363738Mx2cc version 1.1.09***** Making app 'I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/tmp/untitled2.monkey2' (windows debug x86 gcc) *****Parsing...Semanting...Translating...Compiling...Build error: System command failed:g++ -c -std=c++11 -D_WIN32_WINNT=0x0603 -m32 -Os -I"I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/modules/" -I"I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/modules/monkey/native" -I"I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/tmp/" -DBB_NEWREFLECTION -I"I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/tmp/untitled2.buildv1.1.09/windows_debug/build/" -o "I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/tmp/untitled2.buildv1.1.09/windows_debug/build/untitled2_0untitled2.cpp.o" "I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/tmp/untitled2.buildv1.1.09/windows_debug/src/untitled2_untitled2.cpp"I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/tmp/untitled2.buildv1.1.09/windows_debug/src/untitled2_untitled2.cpp: In function 'void bbMain()':I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/tmp/untitled2.buildv1.1.09/windows_debug/src/untitled2_untitled2.cpp:15:15: error: invalid conversion from 'bbInt {aka int}' to 'HWND {aka HWND__*}' [-fpermissive]MessageBoxA(bbInt(0),bbCString(bbString(L"Test",4)),bbCString(bbString(L"Test",4)),bbInt(0));^~~~~~~~In file included from I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/devtools/i686-6.2.0-posix-dwarf-rt_v5-rev1/mingw32/i686-w64-mingw32/include/windows.h:72:0,from I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/tmp/untitled2.buildv1.1.09/windows_debug/include/untitled2_untitled2.h:6,from I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/tmp/untitled2.buildv1.1.09/windows_debug/src/untitled2_untitled2.cpp:2:I:/SpiderOak/DevTools/Monkey2/mx2builder/monkey2/devtools/i686-6.2.0-posix-dwarf-rt_v5-rev1/mingw32/i686-w64-mingw32/include/winuser.h:3563:25: note: initializing argument 1 of 'int MessageBoxA(HWND, LPCSTR, LPCSTR, UINT)'WINUSERAPI int WINAPI MessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType);^~~~~~~~~~~***** Fatal mx2cc error *****Internal mx2cc build errorI’m on latest dev, though last one fails too.
January 7, 2018 at 3:48 pm #12732Got this working using Diffrenzy’s HWND hack here.
I did try Aliasing it as Void Ptr, which I thought would work, as HWND is a HANDLE, which is a void pointer according to Windows Data Types
Monkey123456789101112131415161718192021#Import "<libuser32.a>"#Import "<windows.h>"ExternStruct HWND__EndAlias HWND:HWND__ PtrFunction MessageBoxA:Int (hWnd:HWND, lpText:CString, lpCaption:CString, uType:Int)PublicFunction Main:Void ()MessageBoxA (Null, "Test", "Test", 0)End -
AuthorPosts
You must be logged in to reply to this topic.