Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2004-06-16

Разыскивается BoundsChecker for Delphi

Аллоха, ALL!
В этот знаменательный день 16 июня 2004 г.
пиво ударило мне в голову, и я наскреб:

О всемогущий Алл! Помоги найти BoundsChecker for Delphi, а то от гугля
и яндекса у меня уже аллергия - целый час поисков ничего
не дал по словам (да и по другим тоже):
yandex: BoundsChecker Delphi скачать
google: BoundsChecker Delphi download
В результате у меня собрана коллекция серийников на все версии
BoundsChecker, нашел единственную прямую ссылку на него - но
она сама на себя идет (на народ.ру).
Еще я скачал модуль MemCheck, но из-за него у меня прога access-ами
начинает плеваться (может версия Delphi не та, в модуле про версию не слова).
Или может что-то типа BoundsChecker подскажите - я слышал про memproof,
но нема ссылки на него, поиск тоже ничего не дал.
PS: Версию поновее, плиз :)
PPS: У меня имеется BoundsChecker C++Builder Edition (6.03), может с его
помощью можно утечки в Delphi приложении или ни как?

   Томилов Александр 2004-06-16 19:59:17 (#171461)

Чем отличается AnsiString от CString

Привет всем !!!

Объясните, пожалуйста кто-нибудь: AnsiString от Borland'а и CString от
Microsoft'а - это одно и тоже или нет?
Чем они отличаются (кроме написания :)?

   2004-06-16 16:47:25 (#171253)

Re: [OBORONA-SPAM] winsock in dll

On Wed, 16 Jun 2004 08:35:24 +0300
keel <dima***@s*****.by> wrote:

> Здравствуйте Elmo,
>
> Wednesday, June 16, 2004, 9:50:00 AM, вы писали:
>
> m>> Не вижу причин, почему нет!
> m>> Только учти что созданные в DLL переменные живут тока пока в течении
> m>> одной сессии обрашений, как внутренние в функциях. Т.е. Все операции
> m>> должны быть выполнены в одной функции.
> E> Чего то ты напутал. Что еще за сессия обращений? Нормально все должно
> E> работать.
>
>
> Ладно, что зделать можно конечно же верю, но как?!
> Если можно, приведите пожалуйста небольшой кусок кода.

Вот примерно такой у тебя main

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

DWORD thread_id = 0;
HANDLE thread = 0;

switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
curr_channel = 0;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
ERRPRINT("Error: WSAStartup()\n");
return(0);
}

if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return(0);
}
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
// Освобождение выделенных системных ресурсов
WSACleanup();
break;
}
return TRUE;
}

И у тебя может быть определен класс, скажем CNetClient. Вот пример одного из
методов, как раз для подключения к серверу

int CNetClient::NetConnect(in_addr address, unsigned int Port, int TimeOut)
{
long err;
unsigned long parm = 1;
SOCKADDR_IN addr;
fd_set set;
TIMEVAL timeout;
MSocketList *snew = 0;
int numsocks = 0;
SOCKET sock = INVALID_SOCKET;

timeout.tv_sec = 0;
timeout.tv_usec = TimeOut*1000;

sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == INVALID_SOCKET)
return(0);

//ioctlsocket(sock, FIONBIO, &parm); // Переводим в режим без блоков
setNonBlockSock( sock );

int opt;
int optlen = sizeof(opt);
int iRet;

opt = 64*1024;
iRet = setsockopt( sock, SOL_SOCKET, SO_SNDBUF, (char *)&opt, optlen );
if( iRet != 0 )
iRet = WSAGetLastError();
iRet = setsockopt( sock, SOL_SOCKET, SO_RCVBUF, (char *)&opt, optlen );
if( iRet != 0 )
iRet = WSAGetLastError();

ZeroMemory(&addr, sizeof(addr));
addr.sin_addr = address;
addr.sin_port = htons(Port);
addr.sin_family = AF_INET;
if(connect(sock, (const SOCKADDR *)&addr, sizeof(addr)) == SOCKET_ERROR)
err = WSAGetLastError();

FD_ZERO(&set);
FD_SET(sock, &set);

numsocks = select(INT_MAX, 0, &set, 0, &timeout); // Ждем пока не установится
связь
if(FD_ISSET(sock, &set)) {
snew = SockList.Add(sock, &addr);
NumClientSocks++;
snew->channel = ++curr_channel;

//DelAllClientThreads();
if( !NumClientThreads )
AddClientThread();

return(snew->channel);
} else {
return(0);
}
return(0);
}

Ну и так далее :)

   Alexander Artemenko 2004-06-16 13:21:52 (#171033)

dllimport (C++Builder 5)

Привет!

Вот такой у меня вопрос
Почему вот такое работает (создается dll'ка и все просто супер)
extern "C" float __declspec(dllexport) SQR(float x);

А если написать вот так
extern "C" float __declspec(dllimportt) SQR(float x);

То при компиляции проекта с этой dll'кой выдается такая ошибка
[Linker Error] Unresolved external '_SQR' referenced from C:\WINDOWS\...\UNIT1.OBJ

P.S.
Где можно почитать про dll ?
Что такое __declspec(dllexport) и __declspec(dllimportt) ?
Номер выпуска : 3272
Возраст листа : 268 (дней)
Количество подписчиков : 420
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/171032
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать : mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-06-16 13:21:32 (#171032)

Хэндл ActiveX контролки

Привет!

Пишу ActiveX контролку, и мне нужно получить абсолютные координаты
области моей контролки. Я нигде немогу найти hwnd. Я использую WTL, в
родительском классе CComControlBase m_hWndCD равен нулю.
Вот конструктор:
CComControlBase(HWND& h) : m_hWndCD(h)
{
memset(this, 0, sizeof(CComControlBase));
m_phWndCD = &h;
<...>
}
Кде рыть, где искать ... ?

С пожеланием доброго времени суток,
Олень Элмо

JabberID: da.el***@j*****.ru
Номер выпуска : 3271
Возраст листа : 268 (дней)
Количество подписчиков : 420
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/170953
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать : mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   Elmo 2004-06-16 11:38:03 (#170953)

Re[2]: [OBORONA-SPAM] winsock in dll

Здравствуйте Elmo,

Wednesday, June 16, 2004, 9:50:00 AM, вы писали:

m>> Не вижу причин, почему нет!
m>> Только учти что созданные в DLL переменные живут тока пока в течении
m>> одной сессии обрашений, как внутренние в функциях. Т.е. Все операции
m>> должны быть выполнены в одной функции.
E> Чего то ты напутал. Что еще за сессия обращений? Нормально все должно
E> работать.

Ладно, что зделать можно конечно же верю, но как?!
Если можно, приведите пожалуйста небольшой кусок кода.

   2004-06-16 10:30:17 (#170865)

Re: Проблема с указателями в WinAPI

Мда-а-а. Боюсь, с теорией пока не очень. Не обижайся пожалуйста.
Было бы хорошо на досуге почитать какую-нибудь книгу об архитектуре
процессоров x86 (раз уж они так распространены).
Плюс что-нибудь о реализации Win32, желательно на русском,
чтобы лучше отложилось в памяти. Может кто-нибудь
посоветует тебе подходящий ресурс в сети.
Но если уж взялся отвечать, продолжу.

> Как я понял, когда я передаю указатель на статическую переменную,
> /* POINT pt;
> ListView_GetItemPosition(hSomeListView, index, &pt);
> */
> компилятор кладет в стек только смещение ее в адресном пространстве
> процесса.
Win32 использует "плоскую" модель памяти - все адреса внутри процессов
представляют собой 32-битные смещения. Очень удобно. Объявление
"POINT pt" в функции заставляет компилятор распределить в стеке
фрагмент памяти нужного размера. Выражение "&pt" в вызове
функции заставляет компилятор поместить в стек
32-битный адрес в стеке для структуры "pt".

>
> Когда я передаю через переменную (выделенную мною), содержащую
> указатель и смещение в нем,
> /* POINT *ppt;
> // выделяем память для ppt...
> ListView_GetItemPosition(hSomeListView, index, ppt);
> */
> все работает. Похоже, если я выделяю разделяемую память, это заставляет
> ось возвращать вместе со со смещением и ее дескриптор,
> чтобы и другие процессы могли обратиться к ней.
> Так ли это???????
>
Нет, не так. Повторюсь - адреса внутри процесса 32-битные. То, что
выделяется разделяемая между процессами память этого правила
не отменяет. Операционка отображает одну и ту же область
памяти на адресные пространства нескольких процессов.
Но в твоем случае приходится полагаться на то, что адрес
этой разделяемой памяти окажется одинаковым
для всех процессов.

> P.S. К то му же, в help'e написано
> BOOL ListView_GetItemPosition(HWND hwnd,int i,POINT FAR *ppt);
> Не просто POINT *ppt, а POINT FAR *ppt
О "FAR" в Win32 можно забыть - она определена пустой и
была нужна в 16-битной Windows, в которой
использовались адреса вида
селектор:смещение.

--
Номер выпуска : 3269
Возраст листа : 268 (дней)
Количество подписчиков : 420
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/170844
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать : mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-06-16 10:15:03 (#170844)

Re: Ограничение движения мыши

Hello Elmo,

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

Первое можно сделать с помощью hook'a (надо писать для нее dll'у)
или сделать SetCapture(hWnd_That_Gets_Mouse_Moves), которая будет
посылать для нашего окна сообщения о каждом движении мыши.

Второе, мы анализируем координаты мыши и корректирум их с помощью
SetCursorPos(int x, int y).

   Cyberbob 2004-06-16 06:35:15 (#170736)

Проблема с указателями в WinAPI

Как я понял, когда я передаю указатель на статическую переменную,
/*
POINT pt;
ListView_GetItemPosition(hSomeListView, index, &pt);
*/
компилятор кладет в стек только смещение ее в адресном пространстве
процесса.

Когда я передаю через переменную (выделенную мною), содержащую
указатель и смещение в нем,
/*
POINT *ppt;
//выделяем память для ppt...
ListView_GetItemPosition(hSomeListView, index, ppt);
*/
все работает. Похоже, если я выделяю
разделяемую память, это заставляет ось возвращать вместе со
со смещением и ее дескриптор, чтобы и другие процессы
могли обратиться к ней.
Так ли это???????

P.S. К то му же, в help'e написано
BOOL ListView_GetItemPosition(HWND hwnd,int i,POINT FAR *ppt);
Не просто POINT *ppt, а POINT FAR *ppt

   Cyberbob 2004-06-16 06:35:01 (#170734)