CreateWindowEx ...

 

Hallo zusammen,

ich würde gerne über die user32.dll ein neues Fenster erstellen. Ich scheitere jedoch schon am Anfang. Ich habe versucht CreateWindowEx wie unten beschrieben zu importieren (keine Ahnung, ob die Parameter richtig sind, aber das ist erst einmal auch egal) und aufzurufen. Ich bekomme das auch alles kompiliert.

Wenn ich das Programm dann in den Chart packe, bekomme ich folgende Fehlermeldung:

2018.01.30 16:46:53.243    Cannot find 'CreateWindowEx' in 'user32.dll'

Ich hätte ja mit allen Fehlermeldungen incl. Absturz gerechnet, aber nicht mit dieser.

Wieso findet der Metatrader 4 die CreateWindowEx-Funktion nicht?



import "user32.dll"
  int CreateWindowEx (int dwExStyle, char &pups, char &paps,long dwStyle, int x, int y, int nWidth, int nHeight)
#import


CreateWindowEx(WS_EX_STATICEDGE, //WS_EX_CLIENTEDGE,

                              pups,
                              paps,
                              WS_POPUP | WS_BORDER,
                              100, 100, 100, 100);

 

Dein Aufruf ist nicht korrekt!

HWND WINAPI CreateWindowEx(
  _In_     DWORD     dwExStyle,
  _In_opt_ LPCTSTR   lpClassName,
  _In_opt_ LPCTSTR   lpWindowName,
  _In_     DWORD     dwStyle,
  _In_     int       x,
  _In_     int       y,
  _In_     int       nWidth,
  _In_     int       nHeight,
  _In_opt_ HWND      hWndParent,
  _In_opt_ HMENU     hMenu,
  _In_opt_ HINSTANCE hInstance,
  _In_opt_ LPVOID    lpParam
);

von hier:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms632680%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

Dadurch gibt es anscheinend diese Funktion nicht!

PS: Verwende Alt+s um Code hier zu posten. :)

CreateWindowEx function (Windows)
  • msdn.microsoft.com
Creates an overlapped, pop-up, or child window with an extended window style; otherwise, this function is identical to the CreateWindow function. For more information about creating a window and for full descriptions of the other parameters of CreateWindowEx, see CreateWindow. Syntax Parameters dwExStyle [in] The extended window style of the...
 
Carl Schreiber:

Dein Aufruf ist nicht korrekt!

von hier:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms632680%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

Dadurch gibt es anscheinend diese Funktion nicht!

PS: Verwende Alt+s um Code hier zu posten. :)


Lieber Carl,

auch beim Aufruf der Funktion mit allen Parametern findet der Metatrader einfach die Funktion CreateWindowEx nicht. Ist das ein generelles Problem? Normalerweise habe ich keine Probleme damit, mit user32-Funktionen zu arbeiten. Und bei falschen Parametern stürzt schlimmstenfalls der Metatrader ab, aber die Funktionen werden gefunden. Ihre Links funktionieren übrigens nicht. Können Sie die evtl. bitte noch einmal senden.

VG Klaus

 
Bei Dir wird nach einer Funktion mit 9 Parameter gesucht - aber die gibt es offenbar nicht!
 
Carl Schreiber:
Bei Dir wird nach einer Funktion mit 9 Parameter gesucht - aber die gibt es offenbar nicht!

Die Anzahl der Parameter ist beim Import erst mal egal. Ich kann in MQL was beliebiges schreiben, da die DLL zur Compile-Time nicht bekannt ist, kann die Signatur auch nicht geprüft werden. Die Runtime "schießt dann aus der Hüfte" und packt einfach alle angegeben Parameter auf den Stack. Stimmen Anzahl oder Typ nicht, crasht die App.

Wenn allerdings die Funktion nicht gefunden wird,liegt die Ursache woanders. In diesem Fall ist der Name der Übeltäter:

...
  _In_opt_ LPCTSTR   lpClassName,
  _In_opt_ LPCTSTR   lpWindowName,
...

Die zwei hier sind Strings, die sind definiert als

#ifdef UNICODE
 typedef LPCWSTR LPCTSTR; 
#else
 typedef LPCSTR LPCTSTR;
#endif
Dafür gibt es je nach Umgebung die Funktionen
CreateWindowExA()

und

CreateWindowExW()

Das sollte dein Problem lösen.

Grund der Beschwerde: