Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Использование классов из dll в Borland C++ Builder / 11 сообщений из 11, страница 1 из 1
07.08.2007, 11:27
    #34709935
Giker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
Здравствуйте. У меня есть устройство для которого есть dll, позволяющая работать со всеми функциями этого устройства. Согласно документации в dll запакованы классы. Согласно той же документации, достаточно зарегестрировать dll в системе что бы использовать эти классы, но в документации написаны примеры для VB. Исходников и *.h файлов этой dll у меня нет На чем она неизвестно. Как можно использовать эту dll в Buildere?
Спасибо.
...
Рейтинг: 0 / 0
07.08.2007, 12:07
    #34710132
sashka304
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
Код: plaintext
HMODULE hdll = LoadLibrary("dll");//инициализуруем библиотеку
и вперед объявляешь указатели на ф-и, потом их связываешь с теми что в длл типа таккого
Код: plaintext
1.
2.
typedef bool (__stdcall *CrdLib_Init)();
CrdLib_Init CLib_Init = (CrdLib_Init)GetProcAddress(hdll, "CrdLib_Init");
и будет тебе щастье, только не долго :)
...
Рейтинг: 0 / 0
07.08.2007, 13:25
    #34710599
Giker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
Не могу загрузить функцию Init(long Port) ;
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
typedef void (__stdcall *Init)(long);
 Init FInit;
 hdll = LoadLibrary("fw2kSrv.dll");
 if (!hdll)
 {
  ShowMessage("Library is not loaded!");
  return;
 }
 FInit = (Init)GetProcAddress(hdll, "Init");
 if (!FInit)
   {
      FreeLibrary(hdll);
      ShowMessage("Function is not loaded!"); // Здесь вылетает
      return;
   }
   else
   {
    FInit( 1 );
    ShowMessage("Succses!");
   }
 FreeLibrary(hdll);

Где ошибка?
...
Рейтинг: 0 / 0
07.08.2007, 14:51
    #34711002
Giker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
Сделал def-файл dll, получил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
LIBRARY     FW2KSRV.DLL

EXPORTS
    DllCanUnloadNow                @ 1    ; DllCanUnloadNow
    DllGetClassObject              @ 2    ; DllGetClassObject
    DllRegisterServer              @ 3    ; DllRegisterServer
    DllUnregisterServer            @ 4    ; DllUnregisterServer

Правильно ли отсюда сделать вывод что dll является COM сервером?
Если да, то как получить доступ к ее классам?
...
Рейтинг: 0 / 0
07.08.2007, 17:34
    #34711767
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
GikerПравильно ли отсюда сделать вывод что dll является COM сервером?Этот вывод можно было сделать посмотрев на VB примеры.
...
Рейтинг: 0 / 0
09.08.2007, 16:30
    #34717679
Giker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
Если кто-нибудь может. Дайте пример работы с COM-сервером в билдере: Как инициализировать? Как использовать функции, и классы?
Спасибо.
...
Рейтинг: 0 / 0
09.08.2007, 22:44
    #34718509
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
В папочке Examples билдера подпапочка Apps: там проектики AutoCon и AutoSrv.
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
13.08.2007, 13:38
    #34723648
Giker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
Спасибо всем dll подкдключить удалось и все работает.
Помогтте разобраться вот с чем: одна из функций COM - сервера возвращает тип DATE
Код: plaintext
1.
typedef double DATE

при выполнении функции возвращается значение 39273, что совсем на дату не похоже, КАК можно получить дату в нормальном формате?
Спасибо.
...
Рейтинг: 0 / 0
14.08.2007, 00:20
    #34725125
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void    // convert DATE to date/time 
    DATE2date( const DATE VTime )
{   
    SYSTEMTIME SystemTime;
    // Convert the Variant time to a System time value
    VariantTimeToSystemTime( VTime, &SystemTime );
    int year = SystemTime.wYear;
    int month = (int)SystemTime.wMonth;
    int day = (int)SystemTime.wDay;
    int hour = (int)SystemTime.wHour;
    int min = (int)SystemTime.wMinute;
    int sec = (int)SystemTime.wSecond;
}
...
Рейтинг: 0 / 0
14.08.2007, 09:11
    #34725334
Giker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
Спасибо большое, работает!!!
...
Рейтинг: 0 / 0
14.08.2007, 10:45
    #34725616
Giker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование классов из dll в Borland C++ Builder
И еще вопрос по ходу работы появился. Я подключаю и использую com сервер так:

Код: plaintext
1.
2.
3.
IClassPtr Inter;
Inter.CreateInstance(L"МуCOMSvr.Class");
Inter->RequiredFunction();

В объектах Com сервера есть функции которым передается один параметр типа long. Если подряд вызывать две таких функции, то в первая функция вызывается нормально, а вторая выдает ошибку о том что требуется второй параметр типа tagVariant. Если же перед вызом второй функции вызвать функцию

Код: plaintext
1.
Inter.CreateInstance(L"МуCOMSvr.Class");

то вторая функция работает нормально.
Вопрос №1: Почему это происходит?
Вопрос №2: Если постоянно вызвать CreateInstance перед вызовом функций с параметрами, не забью ли я память? Нужно ли, что бы не забить память делать так
Код: plaintext
1.
2.
Inter.Release();
Inter.CreateInstance(L"МуCOMSvr.Class");

Спасибо.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Использование классов из dll в Borland C++ Builder / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]