Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Импорт класса из dll 
:(
    Опции темы
Competitor
Дата 11.6.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: нет
Всего: -1



Привет всем,
Хочу в MFC использовать класс из сторонней библиотеки. Есть пример ее использования, написанный на VB6.0. Выглядит это так:
В референсах подключается SomeAnycli.dll
В коде создается объект класса так:
Код

Dim lBClient    As    SomeAnyLib.Client
Set lBClient = New SomeAnyLib.Client

И далее используется.
Вот чтобы заюзать функцию в MFC я бы делал так:
Код

HINSTANCE dllInstance;
typedef long (__stdcall *CREATERC4CIPHER)(char* buff, long dwKeyLength);
CREATERC4CIPHER CreateRC4Cipher;
dllInstance = LoadLibrary(szBuffer2);
CreateRC4Cipher = (CREATERC4CIPHER)GetProcAddress(dllInstance, "CreateRC4Cipher");
long rc4Cypher = CreateRC4Cipher(s, size);

Подскажите, каким образом я могу подгрузить целый класс и использовать его методы.
PM MAIL WWW   Вверх
jonie
Дата 11.6.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



а вы уверены что это не COM класс?! 
это не комовые можно импортировать, а комовые можно "импортировать" (путаница)...

поясняю : есть __delspec(dllimport) - истинный импорт (вот тут компилятор нагенерирует вам и прокси классов, и интерфейсов, и h файл из этого всего).
а есть #import filename.ext - импорт COM библиотек.
собственно вам нужен второй. гугл и msdn даст примеры как его использовать... ну и почитать про COM придется..

Это сообщение отредактировал(а) jonie - 11.6.2008, 20:38


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Competitor
Дата 18.6.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: нет
Всего: -1



Хотелось бы задать вопрос по директиве #import.
В мсдн сказано, что она добывает информацию о библиотеке. Обращается ли она при этом к реестру? Т.е. могу я кинуть в папку с проектом Activex компонент, импортнуть его с помощью этой директивы (при этом сам компонент не будет зарегестрирован), и далее начать создавать инстансы нужных мне классов.
PM MAIL WWW   Вверх
Competitor
Дата 18.6.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: нет
Всего: -1



Делаю импорт так:
#import "..\XReleaseP1\MFCActivexTest901.ocx" no_namespace named_guids
Появляется файл tlh с определением ИДшников элементов COM.
Пытаюсь получить доступ к классу так:
Код

HINSTANCE dllInstance;
typedef void (__stdcall *DLLGETCLASSOBJECT)(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
DLLGETCLASSOBJECT fDllGetClassObject;

afx_msg void CChildView::OnLButtonDown(UINT, CPoint)
{
    dllInstance = LoadLibrary("MFCActivexTest901.ocx");
    fDllGetClassObject = (DLLGETCLASSOBJECT)GetProcAddress(dllInstance, "DllGetClassObject");
    IClassFactory *pClassFactory;
    fDllGetClassObject(LIBID_MFCActivexTest901Lib, IID_IClassFactory, (LPVOID*)&pClassFactory);
    IUnknown* pUnk;
    pClassFactory->CreateInstance( NULL, IID_IUnknown, (void**) &pUnk );

    ICurIO *pICurIO;
    HRESULT hr = pUnk->QueryInterface( IID_ICurIO, (LPVOID*)&pICurIO );

    AfxMessageBox(pICurIO->GetSomeStr());


    ::FreeLibrary(dllInstance);
}

Однако указатель pClassFactory всегда оказывается нулевым.
В чем моя ошибка?
PM MAIL WWW   Вверх
Andrey44
Дата 19.6.2008, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Competitor, Проверте что возвращает GetLastError() и по-моему не хватает вызова CoInitialize(NULL)


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0728 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.