Следует иметь в виду, что Windows имеет управление виртуальной памятью, и JVM только нужна память, которая является непрерывна в ее адресном пространстве . Так, другие программы, работающие на системе, не должны обязательно влиять на Ваш размер "кучи". Что будет стоять на пути, DLL, который загружается в в Ваше адресное пространство. К сожалению, оптимизация в Windows, которая минимизирует перемещение DLL во время соединения, делает его, более вероятно у Вас будет фрагментированное адресное пространство. Вещи, которые, вероятно, включат к Вашему адресному пространству кроме обычного материала, включают защитное программное обеспечение, программное обеспечение CBT, шпионское ПО и другие формы вредоносного программного обеспечения. Вероятными причинами различий являются различные патчи безопасности, C версии среды выполнения, и т.д. Драйверы устройств и другие биты ядра имеют свое собственное адресное пространство (другие 2 ГБ 4 ГБ 32-разрядного пространства).
Вы могли попытка, проходящая Вашу привязку DLL в Вашем процессе JVM и взгляде на попытку повторно основывать Ваш DLL в к более компактному адресному пространству. Не забава, но если Вы являетесь отчаянными...
, С другой стороны, можно просто переключиться на 64-разрядный Windows и 64-разрядную JVM. Несмотря на то, что предложили другие, в то время как это уничтожит больше RAM, Вы будете иметь очень [еще 112] непрерывное виртуальное адресное пространство, и выделение 2 ГБ непрерывно было бы тривиально.
На самом деле, я нашел решение здесь .
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HTCAPTION = 0x2;
[DllImport("User32.dll")]
public static extern bool ReleaseCapture();
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
// Paste the below code in the your label control MouseDown event
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
оно работает.
Кроме того, в моем приведенном выше коде, если требуется изменение размера, если необходимо изменить оператор to
if (m.Msg == WM_NCHITTEST)
if ((int)m.Result == HTCLIENT)
m.Result = (IntPtr)HTCAPTION;
Используйте Spy ++, чтобы проанализировать, какие элементы управления получают какие сообщения Windows, и тогда вы будете знать, что вам нужно захватывать.
Не вдаваясь в подробности вашего кода, я представляю себе этот дочерний элемент управления в главном окне вы получаете сообщения, а не форму, и вы хотите ответить на некоторые из них конкретно.