Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Тема закрыта
|
||||
|
Динамическая загрузка lusbapiЗдравствуйте, немогу разобратся как динамически загрузить библиотеку
CreateLInstance1=(PFN_MyFunction)GetProcAddress(hMyDll,"CreateLInstance");//при проверки не выдает ноль еслиб адрес функции небыл бы получен
|
|||
|
||||
|
Re: Динамическая загрузка lusbapiА что это с преобразованием типов в последней строке?
|
|||
|
||||
|
Re: Динамическая загрузка lusbapiПерепробывал все предложеные варианты суть ошибки не поменялась ,Access violation at adres 00000. Read adres 0000 |
|||
|
||||
|
Re: Динамическая загрузка lusbapiВообще не совсем ясно, зачем тут std::string и c_str() - почему не CreateLInstance1("e440")? Выведите для проверки:
#include <string>
Выдало без ошибок
|
|||
|
||||
|
Re: Динамическая загрузка lusbapiПолучается что был неверно передан параметр ?
|
|||
|
||||
|
Re: Динамическая загрузка lusbapiВ Вашем исходном варианте (PCHAR)*a.c_str() ошибка, потому что это есть приведение к типу PCHAR значения (*a.c_str()), т.е. не указателя, а самого символа. Если строка a содержит "e440", то (*a.c_str()) == //'e//', (PCHAR) от него дает некорректный указатель 0x00000065 (ASCII код //'e//'). Годилось бы (PCHAR)a.c_str() (без звездочки) или (CHAR*)a.c_str().
PCHAR pc = const_cast<PCHAR>(*a.c_str());
PCHAR pc = static_cast<PCHAR>(*a.c_str());
http://www.intuit.ru/department/pl/cpp/13/2.html Временная переменная (pc) не нужна, это я ввел для наглядности. |
|||
|
||||
|
Re: Динамическая загрузка lusbapiЗдавствуте решил не создавать велосипед взял клас из вашего примера динамической загрузки
|
|||
|
||||
|
Re: Динамическая загрузка lusbapiТочнее, с тем, что FARPROC, который есть typedef (int (*FARPROC)(), то есть указатель на int proc(void), преобразуется оператором return к LPVOID: invalid conversion from int (*)() to void* Очевидно, под msvc собирается, а gcc строг и такого не потерпит (и правильно, честно говоря). Лучше поставить правильные типы возвращаемого значения прямо в класс. pCreateInstance WINAPI TLoadDll::CallCreateLInstance(void)
Либо return LPVOID(...), но это хуже. |
Страницы 1
Тема закрыта