Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Открыть новую тему     Написать ответ в эту тему

kot3

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интересно, это у меня только такой глюк наблюдается:
 
Среда: RAD 2009 OS: Vista Ultimate x64
 
Проблема: не получается програмно выгрузить ранее динамически загруженную DLL если запускать программу из IDE. При запуске не из под IDE все работает.  
Есть подозрения что аналогичная проблема будет и под Vista x86.
А вот под XP x86 похоже будет работать.  
 
Даже такой простой код не хочет работать:
//---------------------------------------------------------------------------
#pragma hdrstop
#include <tchar.h>
#include <Windows.h>
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE     hDll;
const char  nameDll[] = "testDll.dll";
 
  hDll = NULL;
  hDll = LoadLibrary(nameDll);
  if(hDll) {
    Sleep(3000);
    printf("FreeLibrary() ...");
    if(FreeLibrary(hDll)) printf("... OK."); else printf("... fail");
  }
  printf("end of test.");
  system("pause");
  return 0;
}
//---------------------------------------------------------------------------
 
Имя DLL можно указать любое, главное чтобы в той же папке где и exe лежала.
У кого какие мысли?
Ладно бы если бы FreeLibrary(...) вернула ошибку, а то просто виснет в ней намертво и усе!!!

Всего записей: 430 | Зарегистр. 15-12-2005 | Отправлено: 14:48 07-11-2008 | Исправлено: kot3, 15:01 07-11-2008
Vaital3000

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте люди.
Короче к делу.
Как мне получить двоичное значение реестра,Reg->ReadBinaryData не помогает,там походу некуда буфер писать.
Впринципи я уже над той прогой не работаю,так что твет не обязателен.
 
А теперь те вопросы,которые мне нужны:
1.Как сделать возможнось приложению уходить в трей,и работать в фоне???
2.У меня приложение,которое должно запускать программы в нужное время,GetSystemTime даёт мне время,спомощью if я выставляю нужные минуты и часы,при таком расскладе нужное приложение начинает запускаться много раз,пока не повисает окончательно,в timer время равно 1.Если в if ставлю секунды и минуты в 0,то не запускаеться вообще,если в timer ставлю 600,секунды и мили не прописываю,то тоже не запускаеться,кое как настраивал,но оч нестабильно получалось,подскажите решение.
3.Ну это тупой простой вопрос,но сам чё то найти не могу,как убивать процессы,имея только имя.И как получить его из диалога выбора файлов???
4.Ну и на засыпку как сделать возможность запуска и отключения подключения к интернету???

Всего записей: 1 | Зарегистр. 07-11-2008 | Отправлено: 00:04 08-11-2008
ne0_2002



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kot3
А как либа DLL_PROCESS_DETACH обрабатывает?

Всего записей: 601 | Зарегистр. 18-06-2002 | Отправлено: 23:06 17-11-2008
kot3

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne0_2002

Цитата:
А как либа DLL_PROCESS_DETACH обрабатывает?  


Код:
 
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
 
...
 
  switch(reason) {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    break;
  }
  return true;
 

Всего записей: 430 | Зарегистр. 15-12-2005 | Отправлено: 17:54 18-11-2008 | Исправлено: kot3, 17:56 18-11-2008
ne0_2002



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kot3
А что на месте "..."? Смысл вопроса в том, что виснуть может не сам вызов FreeLibrary, а обработка сигнала выгрузки внутри самой DLL... Хотя если вне IDE работает...

Всего записей: 601 | Зарегистр. 18-06-2002 | Отправлено: 22:49 18-11-2008
kot3

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne0_2002
Да нет там ничего особенного, более того даже такую dll выгрузить не получается

Код:
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
  return 1;
}
 

Мне просто интересно это баг среды, или у меня руки кривые?
Попробуйте у себя этот тест собрать и запустить. Желательно под вистой.
А результаты в студию.

Всего записей: 430 | Зарегистр. 15-12-2005 | Отправлено: 08:52 19-11-2008
VV189



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DELETED....

Всего записей: 500 | Зарегистр. 10-09-2006 | Отправлено: 23:29 21-11-2008 | Исправлено: VV189, 12:53 24-11-2008
amfius



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извините за детский вопрос, но тем не менее. Только начинаю программировать в C++ Builder 2009 (до этого писал в Eclipse CDT+Cygwin). Все обыскал (наверное невнимательно смотрел). Нужно подключить дополнительную библиотеку.  Опцию library path нашел - это путь к подключаемой библиотеке. А где указывать имя самой подключаемой библиотеки?

Всего записей: 618 | Зарегистр. 24-12-2003 | Отправлено: 21:35 03-12-2008
vndovr

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Project->Add to project и указать имя файла

Всего записей: 359 | Зарегистр. 05-02-2004 | Отправлено: 01:59 05-12-2008
amfius



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за совет. Но еще хотел уточнить следующее.  Нужные мне библиотеки идут в формате microsoft и при попытке их подключения выводится предупреждение, что библиотеки не в OMF формате (возможно COFF). В связи с этим мне нужно сгенерировать новые библиотеки импорта (*.lib) на базе *.dll и/или *.def файлов.
Если указать и def и dll-файлы (implib.exe glib-2.0.lib glib-2.0.def libglib-2.0-0.dll), то выводится предупреждение "Warning: duplicate symbol ...", но библиотека ганарится. Если указать просто dll (implib.exe glib-2.0.lib libglib-2.0-0.dll), то библиотека тоже генерится, но чуть меньшего размера. А если включить режим совместимости с библиотеками microsoft, то результирующий размер будет в 2 раза больше. Есть и еще непонятная мне опция -f (forces imports by name).
Подскажите: с какими опциями лучше запускать implib.exe? Или предпочтительней пользоваться coff2omf.exe для конвертации?  

Всего записей: 618 | Зарегистр. 24-12-2003 | Отправлено: 21:23 08-12-2008
portolomeo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
добрый день, подскажите пож-та,  
 
в данный момент пишу на Билдере С++ прогу по обаботке данных, использую данные в клетках - cellstring(*,*) - хотелось бы иметь возможность оперировать этими данными как с числами - в моем случае интересует деление на 2 значении, находящихся в клетках....  
 
ПЛЗ

Всего записей: 12 | Зарегистр. 17-05-2007 | Отправлено: 02:28 09-12-2008
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
portolomeo
Не получится. Надо преобразовывать к числовому типу (StrToInt/StrToFloat), производить необходимые манипуляции и записывать в строковом виде.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 04:53 09-12-2008
AvgustiN



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте!
 
Может ли кто-нибудь подсказать мне как на Builder'е программно создать источник данных ODBC? Это нужно для того, чтобы не настраивать программу вручную при переносе ее на другую машину.
 
Может у кого-нибудь есть уже готовый код? Или может кто-нибудь сталкивался с этим?
 
Заранее спасибо!

Всего записей: 84 | Зарегистр. 04-11-2006 | Отправлено: 16:27 23-01-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AvgustiN
Посмотри функцию SQLConfigDataSource.

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 17:06 23-01-2009
AvgustiN



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Garrett
Спасибо! А Вы не могли бы подсказать можно ли с помощью этой функции создавать источник данных под "Опытными пользователями"?

Всего записей: 84 | Зарегистр. 04-11-2006 | Отправлено: 15:42 24-01-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AvgustiN
Не знаю.

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 17:48 24-01-2009
AnGo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hi, all!
Проблема стара, как сам С++Билдер 2009.
Переезжаем с шестерки на 2009,  появился наконец нужный нам компонент
Код простой, короткий:
AnsiString drtt;
drtt= (AnsiString)pFIBDSDistribut->FieldValues["HOST_ID"];
Сообщение об ошибке тоже простое, но не короткое:
 
E2015 Ambiguity between '_fastcall System::AnsiStringT<0>::AnsiStringT(const System::AnsiStringT<0> &) at c:\program files\codegear\rad studio\6.0\includevcl\dstring.h:358' and '_fastcall System::AnsiStringT<0>::AnsiStringT(const wchar_t *,int) at c:\program files\codegear\rad studio\6.0\include\vcl\dstring.h:392'
Возникает вопрос, а какого собственно возникает не однозначность и как собственно её избежать? В данном конкретном случае.  
И поскольку я уж зашел в этот топик, то задам ещё вопрос по строкам, тем кто уже переехал на 2009. Правильно, наверное, будет заменить все AnsiString в проектах на что-то типа String? Оно вроде как по дефолту юникодное?  
 
 

Всего записей: 1078 | Зарегистр. 07-07-2002 | Отправлено: 11:21 12-02-2009
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AnGo
Я заменил все AnsiString на UnicodeString.
Только есть засада, c_str() возвращает char*, а для wchar_t* нужно вызывать w_str().
Из базы в одной проге читаю так
WideString name = ADOQuery2->FieldByName("user_name")->AsWideString;

Всего записей: 2736 | Зарегистр. 16-10-2003 | Отправлено: 15:12 12-02-2009
vndovr

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AnGo
Насколько я понимаю - неоднозначность из-за того что вызывается приведение типа к AnsiString, соответственно компилятор смотрит какой из конструкторов AnsiString использовать для приведения типа. Но то что возвращает pFIBDSDistribut->FieldValues["HOST_ID"] подходит как параметр для обоих конструкторов.  
 
Посмотри есть ли функции из разряда как Garrett написал - ADOQuery2->FieldByName("user_name")->AsWideString - без неявных преобразований.

Всего записей: 359 | Зарегистр. 05-02-2004 | Отправлено: 19:58 12-02-2009
Kott



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AnGo
за подобное приведение типов и в обычном С++ руки отбивать надо. Что вам мешает использовать более стандартные конструкции?
 

Всего записей: 161 | Зарегистр. 12-12-2003 | Отправлено: 16:52 13-02-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru