Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.10.09;
Скачать: [xml.tar.bz2];

Вниз

YAR под windows   Найти похожие ветки 

 
oxffff ©   (2011-06-09 16:49) [0]

Приветствую.
Хочется поделиться радостью.
Теперь можно создавать окошки на YAR. :))))))

program myprogram;
uses api;

classname:pbyte;
Mwindow:HWND;

function WindowProc(wnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM):LRESULT;
begin
result:=DefWindowProc(wnd,msg,wparam,lparam);
end;

procedure Doproc();
WNDCLASS:TWNDCLASSA;
ActualATOW:ATOW;
MSG:TMSG;
hinstance:HMODULE;

begin
getmem(classname,4);
classname[0]:=97;
classname[1]:=98;
classname[2]:=99;
classname[3]:=0;
hinstance:=GetModuleHandle(0);
FillMem(@WNDCLASS,sizeof(WNDCLASS),0);
WNDCLASS.hInstance:=hinstance;
WNDCLASS.lpfnWndProc:=WindowProc;
WNDCLASS.lpszClassName:=classname;
WNDCLASS.style:=3;
WNDCLASS.cbClsExtra:=0;
WNDCLASS.cbWndExtra:=0;
WNDCLASS.hIcon:= 0;
WNDCLASS.hCursor:=0;
WNDCLASS.hbrBackground:=16;
ActualATOW:=RegisterClass(WNDCLASS);
Mwindow := CreateWindowEx(0,classname,classname, 13565952,100,100,300,300,0,0,hinstance,0);
ShowWindow(Mwindow,5);
ShowWindow(Mwindow,5);

while true do
 begin
 GetMessage(MSG,0,0,0);
  TranslateMessage (MSG);
  DispatchMessage (MSG);  
 end;

end;

begin
Doproc();
end

P.S.
YAR также уже поддерживает перегрузку операторов в виде синтаксиса Free Pascal.
operator -(a:..;b:...):....


 
©   (2011-06-09 17:19) [1]

наблюдаю с интересом за развитием

вопрос появился
а зачем вот этот "program myprogram;" анахронизм?


 
clickmaker ©   (2011-06-09 17:36) [2]

> а зачем вот этот "program myprogram;"

наверно может быть еще library mylibrary; ?


 
©   (2011-06-09 17:38) [3]


> наверно может быть еще library mylibrary; ?


так а почему это нельзя разрулить опциями проекта?


 
oxffff ©   (2011-06-09 18:13) [4]

За основу взят синтаксис Delphi.
Все меняется на лету. Например при трансляции на .NET

WNDCLASS.lpfnWndProc
раньше был указатель на функцию,а сейчас это полноценный делегат.
Это связано с более простым маршалингом по умолчанию.

Меня больше интересуют вопрос почему виснет

на

Mwindow := CreateWindowEx(0,classname,classname, 13565952,100,100,300,300,0,0,hinstance,0);
ShowWindow(Mwindow,5);
while true do
begin
GetMessage(MSG,0,0,0); <-

Но не виснет при

Mwindow := CreateWindowEx(0,classname,classname, 13565952,100,100,300,300,0,0,hinstance,0);
ShowWindow(Mwindow,5);
ShowWindow(Mwindow,5);

while true do
begin
GetMessage(MSG,0,0,0); <-

И тот и другой вариант реализации на Delphi 7.
Везде PEheader.subsystem=2;

Уже второй день ломаю голову. Так и не понятно.

Если кто может написать на C# и проверить как там также виснет?


 
oxffff ©   (2011-06-09 18:14) [5]


> И тот и другой вариант реализации на Delphi 7.


не виснет на Delphi 7.


 
©   (2011-06-09 18:21) [6]


> За основу взят синтаксис Delphi.

ну, совместимость - единственная причина, до которой я додумался
и то - эти два слова особо не повлияют при переносе проекта с делфи на YAR
я сейчас неспешно переношу проект с C++Builder на Qt - язык почти один, а переписывать приходится много


> Если кто может написать на C# и проверить как там также
> виснет?

нету шарпа, сорри


 
oxffff ©   (2011-06-09 18:28) [7]


> * ©   (09.06.11 17:19) [1]
> наблюдаю с интересом за развитием
>
> вопрос появился
> а зачем вот этот "program myprogram;" анахронизм?


Было здорово, если бы люди высказали свое мнение по поводу синтаксиса современных Pascal подобных языков. Например Delphi, Free Pascal, Prism.
Что им нравится/не нравится, и что бы они хотели изменить в этих языках.


 
Зритель   (2011-06-09 18:45) [8]

А разве там не бесконечный цикл? Вроде бы, надо так:

while GetMessage(MSG, 0, 0, 0) do
begin
 TranslateMessage (MSG);
 DispatchMessage (MSG);  
end;


 
oxffff ©   (2011-06-09 19:00) [9]


> Зритель   (09.06.11 18:45) [8]
> А разве там не бесконечный цикл? Вроде бы, надо так:
>
> while GetMessage(MSG, 0, 0, 0) do
> begin
>  TranslateMessage (MSG);
>  DispatchMessage (MSG);  
> end;


Это то да.
Также нужно еще и WM_QUIT.


 
Зритель   (2011-06-09 19:03) [10]


> oxffff ©   (09.06.11 19:00) [9]

По приходу WM_QUIT цикл сам прервется (GetMessage выдаст false).


 
oxffff ©   (2011-06-09 19:03) [11]

program myprogram;
uses api;

classname:pbyte;
Mwindow:HWND;

function WindowProc(wnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM):LRESULT;
begin
if msg=2 then
         begin
         PostQuitMessage(0);
         result:=0
         end
else
begin
result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
end;

procedure Doproc();
WNDCLASS:TWNDCLASSA;
ActualATOW:ATOW;
MSG:TMSG;
hinstance:HMODULE;

begin
getmem(classname,4);
classname[0]:=97;
classname[1]:=98;
classname[2]:=99;
classname[3]:=0;
hinstance:=GetModuleHandle(0);
FillMem(@WNDCLASS,sizeof(WNDCLASS),0);
WNDCLASS.hInstance:=hinstance;
WNDCLASS.lpfnWndProc:=WindowProc;
WNDCLASS.lpszClassName:=classname;
WNDCLASS.style:=3;
WNDCLASS.cbClsExtra:=0;
WNDCLASS.cbWndExtra:=0;
WNDCLASS.hIcon:= 0;
WNDCLASS.hCursor:=0;
WNDCLASS.hbrBackground:=16;
ActualATOW:=RegisterClass(WNDCLASS);
Mwindow := CreateWindowEx(0,classname,classname, 13565952,100,100,300,300,0,0,hinstance,0);
ShowWindow(Mwindow,5);
ShowWindow(Mwindow,5);

while GetMessage(MSG,0,0,0)<>0  do
begin
 TranslateMessage (MSG);
 DispatchMessage (MSG);  
end;
end;

begin
Doproc();
end

:)


 
Зритель   (2011-06-09 19:06) [12]

А если теперь убрать второе ShowWindow(Mwindow,5) - все равно виснет?


 
oxffff ©   (2011-06-09 19:08) [13]

Bool тип представлен как int32. Поэтому пока сравнение с целочисленными типами.
Напишу чуть позже обобщенный TRUE и FALSE.
По типу обобщенной функции c constraint.

TRUE<T:bool or boolean>():T;
begin
result:=TRUE_CONST;
end;

Кстати на самом деле Getmem в YAR имеет вид

Getmem<T:typed or untyped pointer>(var p:T;,..);
Поэтому вообще можно написать например Getmem<pointer>(p,..);
Но об этом знает только автор YAR. :)


 
Зритель   (2011-06-09 19:11) [14]


if msg = 2 then
begin
 ... // Здесь несколько операторов
end
else
 begin
   ... // Здесь один оператор
 end;

Выделенные жирным begin-end (в ветке else) действительно нужны? Это особенность синтаксиса, или их можно убрать, как в Паскале?


 
oxffff ©   (2011-06-09 19:14) [15]


> Зритель   (09.06.11 19:06) [12]
> А если теперь убрать второе ShowWindow(Mwindow,5) - все
> равно виснет?


Да. И мне совершенно непонятно почему. Я смотрел PE заголовок.
Отличие Delphi 7 и YAR->.NET в characteristics. Sub system и там и там WIN_GUI.

Вот весь код, который формируется.

.assembly extern mscorlib { auto }
.assembly project {}
.subsystem 2
.field public static int32 __heaphandle
.method public static pinvokeimpl("kernel32.dll" as "HeapCreate" winapi) int32 heapcreate(int32 flOptions,int32 dwInitialSize,int32 dwMaximumSize) cil managed preservesig
{
}
.method public static pinvokeimpl("kernel32.dll" as "HeapDestroy" winapi) bool heapdestroy(int32 handle) cil managed preservesig
{
}
.method public static pinvokeimpl("kernel32.dll" as "HeapAlloc" winapi) native int heapalloc(int32 handle,int32 dwFlags,int32 dwBytes) cil managed preservesig
{
}
.method public static pinvokeimpl("kernel32.dll" as "HeapFree" winapi) bool heapfree(int32 handle,int32 dwFlags,native int lpMem) cil managed preservesig
{
}
.method public static native int _getmem(int32 size) cil managed
{
ldsfld int32 __heaphandle
ldc.i4 0
ldarg size
call native int heapalloc(int32,int32,int32)
ret
}
.method public static void _freemem(native int pvalue) cil managed
{
ldsfld int32 __heaphandle
ldc.i4 0
ldarg pvalue
call bool heapfree(int32,int32,native int)
pop
ret
}
.typedef unsigned int8* as pbyte
.typedef int32 as BOOL
.typedef unsigned int32 as Thandle
.typedef unsigned int16 as ATOW
.typedef int32 as UINT
.typedef int32 as HINST
.typedef int32 as HMENU
.typedef int32 as HCURSOR
.typedef int32 as HBRUSH
.typedef char* as PWideChar
.typedef int32 as HICON
.typedef unsigned int32 as HWND
.typedef int32 as WPARAM
.typedef int32 as LPARAM
.typedef int32 as LRESULT
.typedef unsigned int32 as HMODULE
.class public sealed TFNWndProc extends [mscorlib]System.MulticastDelegate
{
.method public hidebysig specialname rtspecialname instance void  .ctor(object MethodsClass, native int MethodPtr) runtime managed { }
.method public hidebysig virtual instance int32 Invoke(unsigned int32 wnd,int32 msg,int32 wparam,int32 lparam) runtime managed { }
}
.class public sealed TFNThreadStartRoutine extends [mscorlib]System.MulticastDelegate
{
.method public hidebysig specialname rtspecialname instance void  .ctor(object MethodsClass, native int MethodPtr) runtime managed { }
.method public hidebysig virtual instance unsigned int32 Invoke(native int p) runtime managed { }
}
.class public sequential sealed TWNDCLASSA extends [mscorlib]System.ValueType
{
.field public int32 style
.field public class TFNWndProc lpfnWndProc
.field public int32 cbClsExtra
.field public int32 cbWndExtra
.field public int32 hInstance
.field public int32 hIcon
.field public int32 hCursor
.field public int32 hbrBackground
.field public unsigned int8* lpszMenuName
.field public unsigned int8* lpszClassName
}
.class public sequential sealed TPoint extends [mscorlib]System.ValueType
{
.field public int32 X
.field public int32 Y
}
.class public sequential sealed TMSG extends [mscorlib]System.ValueType
{
.field public unsigned int32 hwnd
.field public int32 message
.field public int32 wParam
.field public int32 lParam
}
.typedef  valuetype TMSG* as PMSG
.method hidebysig public static pinvokeimpl("user32.dll" as "RegisterClassA" winapi)
unsigned int16 RegisterClass( valuetype TWNDCLASSA& wndclass) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("kernel32.dll" as "GetCurrentProcess" winapi)
unsigned int32 GetCurrentProcess() cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("user32.dll" as "CreateWindowExA" winapi)
unsigned int32 CreateWindowEx(unsigned int32 dwExStyle,native int lpClassName,native int lpWindowName,unsigned int32 dwStyle,int32 X,int32 Y,int32 nWidth,int32 nHeight,unsigned int32 hWndParent,int32 hMenu,int32 hInstance,int32 lpParam) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("kernel32.dll" as "GetLastError" winapi)
unsigned int32 GetLastError() cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("user32.dll" as "DefWindowProcA" winapi)
int32 DefWindowProc(unsigned int32 hWnd,int32 Msg,int32 wParam,int32 lParam) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("user32.dll" as "ShowWindow" winapi)
int32 ShowWindow(unsigned int32 hWnd,int32 nCmdShow) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("user32.dll" as "GetMessageA" winapi)
int32 GetMessage( valuetype TMSG& Msg,unsigned int32 hWnd,int32 wMsgFilterMin,int32 wMsgFilterMax) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("user32.dll" as "TranslateMessage" winapi)
int32 TranslateMessage( valuetype TMSG& lpMsg) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("user32.dll" as "DispatchMessageA" winapi)
int32 DispatchMessage( valuetype TMSG& lpMsg) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("user32.dll" as "LoadIconA" winapi)
int32 LoadIcon(int32 hInstance,unsigned int32 lpIconName) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("kernel32.dll" as "CreateThread" winapi)
unsigned int32 CreateThread(int32 lpThreadAttributes,unsigned int32 dwStackSize,class TFNThreadStartRoutine ThreadProc,unsigned int32 lpParameter,unsigned int32 dwCreationFlags,unsigned int32& lpThreadId) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("kernel32.dll" as "Sleep" winapi)
void Sleep(unsigned int32 dwMilliseconds) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("kernel32.dll" as "GetModuleHandleA" winapi)
unsigned int32 GetModuleHandle(unsigned int32 lpModuleName) cil managed preservesig
{
}
.method hidebysig public static pinvokeimpl("user32.dll" as "PostQuitMessage" winapi)
void PostQuitMessage(int32 code) cil managed preservesig
{
}


 
oxffff ©   (2011-06-09 19:14) [16]

.field public static unsigned int8* classname
.field public static unsigned int32 Mwindow
.method public static int32 WindowProc(unsigned int32 wnd,int32 msg,int32 wparam,int32 lparam) cil managed
{
.maxstack 99
.locals init(int32 localvarresult)
ldarg  msg
ldc.i4  2
ceq
brfalse Label1
ldc.i4  0
call  void PostQuitMessage(int32 code)
ldc.i4  0
stloc localvarresult
br Label0
Label1:
ldarg  wnd
ldarg  msg
ldarg  wparam
ldarg  lparam
call  int32 DefWindowProc(unsigned int32 hWnd,int32 Msg,int32 wParam,int32 lParam)
stloc localvarresult
Label0:
ldloc localvarresult
ret
}
.method public static void Doproc() cil managed
{
.maxstack 99
.locals init( valuetype TWNDCLASSA WNDCLASS,unsigned int16 ActualATOW, valuetype TMSG MSG,unsigned int32 hinstance)
ldsflda unsigned int8* classname
ldc.i4  4
call  native int _getmem(int32)
stobj unsigned int8*
sizeof unsigned int8
ldc.i4  0
mul
ldsfld  unsigned int8* classname
add
ldc.i4  97
stobj unsigned int8
sizeof unsigned int8
ldc.i4  1
mul
ldsfld  unsigned int8* classname
add
ldc.i4  98
stobj unsigned int8
sizeof unsigned int8
ldc.i4  2
mul
ldsfld  unsigned int8* classname
add
ldc.i4  99
stobj unsigned int8
sizeof unsigned int8
ldc.i4  3
mul
ldsfld  unsigned int8* classname
add
ldc.i4  0
stobj unsigned int8
ldc.i4  0
call  unsigned int32 GetModuleHandle(unsigned int32 lpModuleName)
stloc  hinstance
ldloca  WNDCLASS
ldc.i4  0
sizeof  valuetype TWNDCLASSA
initblk
ldloca  WNDCLASS
ldloc  hinstance
stfld  int32 TWNDCLASSA::hInstance
ldloca  WNDCLASS
ldnull
ldftn  int32 WindowProc(unsigned int32 wnd,int32 msg,int32 wparam,int32 lparam)
newobj instance void class TFNWndProc::.ctor(object,native int)
stfld  class TFNWndProc TWNDCLASSA::lpfnWndProc
ldloca  WNDCLASS
ldsfld  unsigned int8* classname
stfld  unsigned int8* TWNDCLASSA::lpszClassName
ldloca  WNDCLASS
ldc.i4  3
stfld  int32 TWNDCLASSA::style
ldloca  WNDCLASS
ldc.i4  0
stfld  int32 TWNDCLASSA::cbClsExtra
ldloca  WNDCLASS
ldc.i4  0
stfld  int32 TWNDCLASSA::cbWndExtra
ldloca  WNDCLASS
ldc.i4  0
stfld  int32 TWNDCLASSA::hIcon
ldloca  WNDCLASS
ldc.i4  0
stfld  int32 TWNDCLASSA::hCursor
ldloca  WNDCLASS
ldc.i4  16
stfld  int32 TWNDCLASSA::hbrBackground
ldloca  WNDCLASS
call  unsigned int16 RegisterClass( valuetype TWNDCLASSA& wndclass)
stloc  ActualATOW
ldc.i4  0
ldsfld  unsigned int8* classname
ldsfld  unsigned int8* classname
ldc.i4  13565952
ldc.i4  100
ldc.i4  100
ldc.i4  300
ldc.i4  300
ldc.i4  0
ldc.i4  0
ldloc  hinstance
ldc.i4  0
call  unsigned int32 CreateWindowEx(unsigned int32 dwExStyle,native int lpClassName,native int lpWindowName,unsigned int32 dwStyle,int32 X,int32 Y,int32 nWidth,int32 nHeight,unsigned int32 hWndParent,int32 hMenu,int32 hInstance,int32 lpParam)
stsfld  unsigned int32 Mwindow
ldsfld  unsigned int32 Mwindow
ldc.i4  5
call  int32 ShowWindow(unsigned int32 hWnd,int32 nCmdShow)
pop
ldsfld  unsigned int32 Mwindow
ldc.i4  5
call  int32 ShowWindow(unsigned int32 hWnd,int32 nCmdShow)
pop
Label0:
ldloca  MSG
ldc.i4  0
ldc.i4  0
ldc.i4  0
call  int32 GetMessage( valuetype TMSG& Msg,unsigned int32 hWnd,int32 wMsgFilterMin,int32 wMsgFilterMax)
ldc.i4  0
ceq
ldc.i4  0
ceq
brfalse Label1
ldloca  MSG
call  int32 TranslateMessage( valuetype TMSG& lpMsg)
pop
ldloca  MSG
call  int32 DispatchMessage( valuetype TMSG& lpMsg)
pop
br Label0
Label1:
ret
}
.method public static void main() cil managed
{
.maxstack 99
.entrypoint
ldc.i4 0
ldc.i4 10000000
ldc.i4 0
call int32 heapcreate(int32,int32,int32)
stsfld  int32 __heaphandle
call  void Doproc()
ldsfld  int32 __heaphandle
call bool heapdestroy(int32)
pop
ret
}


 
oxffff ©   (2011-06-09 19:15) [17]


> Зритель   (09.06.11 19:11) [14]
>
> if msg = 2 then
> begin
>  ... // Здесь несколько операторов
> end
> else
>  begin
>    ... // Здесь один оператор
>  end;
>
> Выделенные жирным begin-end (в ветке else) действительно
> нужны? Это особенность синтаксиса, или их можно убрать,
> как в Паскале?


Можно убрать. Там по грамматике один STMT(statement)


 
oxffff ©   (2011-06-09 19:45) [18]

Да вопросов конечно появляется больше, чем ответов. :)
Например придется управляемые объекты делать pinned и делать на них ссылки при сохранении ссылок на них в неуправляемой куче.
Вообщем я помню об этом, и стараюсь писать на YAR аккуратно без ссылок в управляемую кучу из неуправляемой.


 
oxffff ©   (2011-06-09 19:52) [19]


> oxffff ©   (09.06.11 19:45) [18]


Хотя не всегда получается. :)


 
©   (2011-06-09 20:00) [20]


> Было здорово, если бы люди высказали свое мнение по поводу
> синтаксиса современных Pascal подобных языков. Например
> Delphi, Free Pascal, Prism.

в общем то в последних версиях делфи есть все что мне надо
только исполнение иногда хромает

сам я на делфи уже не пишу, жизнь заставила перейти на с++


 
DiamondShark ©   (2011-06-09 20:19) [21]


> oxffff ©

А с ShowWindow(Mwindow,1) -- виснет?


 
oxffff ©   (2011-06-09 20:25) [22]


> DiamondShark ©   (09.06.11 20:19) [21]
>
> > oxffff ©
>
> А с ShowWindow(Mwindow,1) -- виснет?


Виснет.


 
DiamondShark ©   (2011-06-09 20:31) [23]

Что возвращает ShowWindow в каждом вызове?

GetMessage что возвращает? Она может возвращать ноль, не ноль и -1.
Или она не возвращается?


 
oxffff ©   (2011-06-09 20:45) [24]


> GetMessage что возвращает? Она может возвращать ноль, не
> ноль и -1.
> Или она не возвращается?


В том то и дело, что она не возвращается. Заходит, но не выходит.
Аналогичный native код на delphi работает с одним ShowWindow.


 
oxffff ©   (2011-06-09 21:29) [25]

Буду искать отличия у себя.  Написал на С# (прошу не пинать).
там Все нормуль.

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsApplication14
{
   static class Program
   {
struct POINTAPI
       {
           public Int32 x;
           public Int32 y;
       };

       struct MSG
       {
           public Int32 hwmd;
           public Int32 message;
           public Int32 wParam;
           public Int32 lParam;
           public Int32 time;
           public POINTAPI pt;
       } ;

       public delegate IntPtr myWndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);

       [StructLayout(LayoutKind.Sequential)]
       struct WNDCLASS
       {
           public uint style;
           [MarshalAs(UnmanagedType.FunctionPtr)]
           public myWndProc lpfnWndProc;
           public int cbClsExtra;
           public int cbWndExtra;
           public IntPtr hInstance;
           public IntPtr hIcon;
           public IntPtr hCursor;
           public IntPtr hbrBackground;
           public string lpszMenuName;
           public string lpszClassName;
       }

       [DllImport("user32.dll")]
       [return: MarshalAs(UnmanagedType.Bool)]
       static extern bool GetMessage(out  MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);

       [DllImport("user32.dll")]
       static extern ushort RegisterClass([In] ref WNDCLASS lpWndClass);

       [DllImport("user32.dll")]
       static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam);

       [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
       public static extern IntPtr GetModuleHandle(string lpModuleName);

       [DllImport("user32.dll")]
       static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);

       [DllImport("user32.dll", SetLastError = true)]
       static extern IntPtr CreateWindowEx(
          Int32 dwExStyle,
          string lpClassName,
          string lpWindowName,
          Int32 dwStyle,
          int x,
          int y,
          int nWidth,
          int nHeight,
          IntPtr hWndParent,
          IntPtr hMenu,
          IntPtr hInstance,
          IntPtr lpParam);

       public static IntPtr ActualWnd(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam)
       {
           return DefWindowProc(hWnd, uMsg, wParam, lParam);
       }

       [STAThread]
       static void Main()
       {
        MSG lpMsg;
           IntPtr a;
           WNDCLASS wndclass;
           UInt16 Atom;
           IntPtr wndhandle;

           wndclass = new WNDCLASS();

           wndclass.hInstance = GetModuleHandle(null);
           wndclass.lpfnWndProc = ActualWnd;
           wndclass.lpszClassName = "abc";
           wndclass.style = 3;
           wndclass.cbClsExtra = 0;
           wndclass.cbWndExtra = 0;
           wndclass.hIcon = (IntPtr)0;
           wndclass.hCursor = (IntPtr)0;
           wndclass.hbrBackground = (IntPtr)0;
           Atom = RegisterClass(ref wndclass);
           wndhandle = CreateWindowEx(0, "abc", "abc", 13565952, 100, 100, 300, 300, (IntPtr)0, (IntPtr)0, (IntPtr)0, (IntPtr)0);
           ShowWindow(wndhandle, 5);
           GetMessage(out lpMsg, (IntPtr)0, 0, 0);
       }
   }
}


 
oxffff ©   (2011-06-09 21:53) [26]


> oxffff ©   (09.06.11 21:29) [25]
> Буду искать отличия у себя


Хм. Код формируется приемлемый.
Если запускать отдельно, то все нормуль.

А если запустить в моей среде, то увы.
Видимо перехват консольного вывода оказывает воздействие.
Я же до этого только консольными баловался приложениями.
А тут даже моя среда не выдержала прогресса. :))))))))))))))


 
©   (2011-06-09 22:12) [27]


> oxffff ©   (09.06.11 21:53) [26]

а в паблике есть YAR?
я бы потестировал


 
oxffff ©   (2011-06-09 22:22) [28]


> * ©   (09.06.11 22:12) [27]


Обязательно будет. Скорее даже будет возможность делать свои backend для других платформ(позже). Я выложу пример разработки для MSIL .NET.
Пока я исправляю баги и недоработки. Их еще достаточно :)
Они есть.


 
©   (2011-06-09 22:25) [29]


> oxffff ©   (09.06.11 22:22) [28]

ок
интересно
жду


 
oxffff ©   (2011-06-09 23:23) [30]

Если кто будет использовать MSIL для развлечения необходимо заменить типы на

.class public sequential sealed TPoint extends [mscorlib]System.ValueType
{
.field public int32 X
.field public int32 Y
}
.class public sequential sealed TMSG extends [mscorlib]System.ValueType
{
.field public unsigned int32 hwnd
.field public int32 message
.field public int32 wParam
.field public int32 lParam
.field public int32 time
.field public  valuetype TPoint point
}


 
Дмитрий С ©   (2011-06-10 06:12) [31]

Пожелания:
1. чтобы можно было переменные (константы, метки) определять в теле функции:
begin
 ...
 var i:integer;
 for i:=....
 ...
end;

2. Чтобы можно было писать несколько uses-ов в модуле.

3. Нормальный ifthen:
условие?<если да>:<если нет>;

4. Многострочные строки:
S := "qweqwe
qweqwe
qweqwe";

5. Константа-массив без объявления размерности:
const
 Strs: array[] of string = ("zero", "one", "two"); // - компилятор как бы сам может посчитать:)

6. Что бы функции без результата автоматически считались процедурами, а не ошибку давали.

7. Чтобы можно было делегировать свойства (и, возможно, методы), например:

TFoo = class
private
 FBar:TStringList;
public
 property Count:Integer read FBar.Count; // не надо писать отдельный обработчик
end;

8. case для строк

9. break, continue с уровнем выхода, например:
for I := 0 to 100 do
 for J := 0 to 100 do
 begin
   ...
   ...
   continue 2; // - next I
   ...
   ...
   break 2; // - выход с обоих циклов
 end;

Пока хватит? :)


 
Дмитрий С ©   (2011-06-10 06:15) [32]


> Но не виснет при

У меня бывает под отладкой, пошагово, код работает как надо, а просто по F9 выдает AV, при этом привязки к таймеру и многопоточности нет.


 
©   (2011-06-10 06:55) [33]


> 1. чтобы можно было переменные (константы, метки) определять
> в теле функции:

c++


> 2. Чтобы можно было писать несколько uses-ов в модуле.

не понял, что под этим подразумевается


> 3. Нормальный ifthen:

c++


> 4. Многострочные строки:

идея понятна, но есть проблем куча - как переносы строк обрабатывать?
в смысле, как их казать пользователю?
это одна из проблем


> 5. Константа-массив без объявления размерности:

php например


> 7. Чтобы можно было делегировать свойства (и, возможно,
> методы), например:

полезно!


> 8. case для строк

тот же php (польза сомнительна)


> continue 2; // - next I

бить будут
и в общем то не зря


 
Дмитрий С ©   (2011-06-10 07:12) [34]


>
> не понял, что под этим подразумевается

например
unit SomeUnit;
interface

uses Windows, Sysutils, ...;
uses Unit1, Unit2;

type
 TForm1 = class(TForm)
...

А к чему остальное то было?


 
©   (2011-06-10 07:27) [35]


> uses Windows, Sysutils, ...;uses Unit1, Unit2;

а смысл?
или имеется ввиду инклюды ц++?
просто оно даже выглядит странно


> А к чему остальное то было?

это просто мои имхи на предложения


 
oxffff ©   (2011-06-10 08:04) [36]


> Пока хватит? :)
>
>


Спасибо большое. Пожелания понятны.
Пункт 6?.
Вполне возможно писать method вместо
procedure и function, как в Prism.


 
Дмитрий С ©   (2011-06-10 08:22) [37]


> а смысл?

Можно выделить группу общих модулей, выложить в common_units.inс, например. и использовать так:
unit Unit1;
interface
uses Windows, Forms, ....;
{$I common_units.inс}


 
jack128_   (2011-06-10 08:24) [38]


> 3. Нормальный ifthen:
> условие?<если да>:<если нет>;

зачем, сделайте как в нормальных языках, что бы if then else был выражением, и не нужно будут отдельной оператор вводить.


>  Скорее даже будет возможность делать свои backend для других
> платформ(позже).

бекэнд к LLVM не забудь -)


 
©   (2011-06-10 08:25) [39]


> Дмитрий С ©   (10.06.11 08:22) [37]

это сахар
а инклюдов и сейчас можно пользовать не одним


 
©   (2011-06-10 08:27) [40]


> бекэнд к LLVM не забудь -)

:-)



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2011.10.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.6 MB
Время: 0.004 c
2-1308336175
теркин
2011-06-17 22:42
2011.10.09
косвенная рекурсия


1-1267824799
Архип
2010-03-06 00:33
2011.10.09
плагин для Оперы (dll)


15-1308256200
Юрий
2011-06-17 00:30
2011.10.09
С днем рождения ! 17 июня 2011 пятница


2-1308227087
sanekin3737
2011-06-16 16:24
2011.10.09
CGI и базы данных


2-1308786170
Gu
2011-06-23 03:42
2011.10.09
Мало памяти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский