![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Nastya |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Ребята, нужна помошь такая в принципе ситуация.
Есть в приложении описанный класс, мне надо написать dll, в которой будет функция, получающая указаетель на объект моего класса. я в своем приложении буду неявно грузить эту dll и передавать ей указетель на объект класса. т.е. приблизительно так В приложение
В dll
при таком раскладе dll не линкуется. Линковщик пишет , unresolved external symbol "__declspec(dllimport) и т.д. про метод f1() - дескать не найдена реализация Если я метод f1() объявляю виртуальным, то проблем во время линковки не возникает GetProccAddress благополучно находит функцию FDll, а вот метод f1() - находит не верно, вместо него использует указаетль на некий метод вообще родительского класса. Вот такая проблема. Думаю рассказала доходчиво. Интересно было бы получить ответ -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
||||
|
|||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Я пошла еще дальше, объявила структуру с чисто виртуальными функциями (типа интерфейса) именно тем, которые надо будет использовать в dll и мой класс наследовала от этой структуры.
А в функцию (которя внутри dll) передала не указаель на класс, а указетль на структуру. Все равно получила ошибку вренени исполнения. Это можут быть связанно с тем что вызываемая функция имеет несколько перегрузок с разными парметрами ???? Добавлено @ 17:55 В последнем случае ошибка времени исполнения звучит как Access violation reading location 0xeef420e9. -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Или я была не внимательно или там нет, того что мне нужно.
В том то и проблема, что из dll должны вызываться методы моего класса, а функция dll должна получать указетль на объект в качетсве парметра. Dll компануется. Указетель получает, получает его правильный со всеми таблицами виртуальных вызовов, а вот функцию вызывать не может. ПОЧЕМУ!!! -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Я кажется, нашла в чем у меня была проблема, в том что в классе, от которого мой класс наследовался была одна виртуальная функция, и таким образом при передачи объекта в dll.
dll функция получала не ту таблицу виртуальных функций, на которую расчитывала. От виртуальности в базовом классе я отказалась, но как быть если сделать это будет нельзя???? Ребят не у кого нет серьезной литературы по этому поводу. Может если ее мповнимательнее почитать до меня наконец-то дайдет концепция COM -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
в принципе глава ООП и DLL ( только там без передачи указателей )
а про написание СОМ-серверов... на чем пишем? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Ni@m |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 11.3.2004 Где: почти Киев Репутация: нет Всего: 6 |
Когда обьявляешь класс убери __declspec(dllexport). И непонятно что ты делаешь с классом из библиотеки. Ты от него наследуешь?
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше. |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Спасбо Ni@m, но у меня уже все работает.
А классом из библиотеки я пользуюсь. И не просто классом, а ужесозданным и проинициализированным объектом. -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |