![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
Доброго дня!
У меня возникла проблемка с импортом функций из DLL. Первая функция InitAVILibrary срабатывает без проблем, а вот следующая с параметрами InitAVIMemory(TPPAVI ppAVI) выдает ошибку Access violation reading location 0x00000000. По идее в метод я просто посылаю указатель ppAVI и он после выполнения функции указывает мне куда нужно...
--------------------
|
|||
|
||||
threef |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
так проверь, почему getprocadr возвращает тебе 0.Имя там, фамилия...
|
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
Предположение: скорее всего хочет, чтобы ты через указатель этот памяти ей передал для работы, а ты туда пустой указатель даешь. Все должно быть описано в доках по библиотеке, куда сколько выделять и как контролировать. |
|||
|
||||
Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
threef, забыл сказать, адреса на все функции берутся нормально, 0-ых нету.
zkv, пробовал выделять память но не помогает:( DLL написана на Delphi, вот заголовочный:
больше никаких сведений. Как быть с этим добром? --------------------
|
|||
|
||||
threef |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
function InitAVIMemory (ppAVI:TPPAVI):integer; cdecl; external LibAVI; typedef int (*INITAVIMEMORY)(TPPAVI ppAVI); 1. Попробуй добавить __cdecl 2.-,,- extern "C" перед всеми обьявлениями типов. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
скорее наоборот, stdcall: cdecl и так по-умолчанию, а раз дельфи, то скорее там паскалевские соглашения... -------------------- ... |
|||
|
||||
threef |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Earnest,
function InitAVIMemory (ppAVI:TPPAVI):integer; cdecl; external LibAVI; Добавлено @ 20:19 __cdecl не по умолчанию, С++ имеет свои соглашения об именах это я глупость сморозил, извините, но все-таки стоит проверить опцию /Gd А если не получится - пробовать тот же __stdcall, __fastcall : Microsoft Specific The __pascal, __fortran, and __syscall calling conventions are no longer supported. You can emulate their functionality by using one of the supported calling conventions and appropriate linker options. WINDOWS.H now supports the WINAPI macro, which translates to the appropriate calling convention for the target. Use WINAPI where you previously used PASCAL or __far __pascal. END Microsoft Specific Это сообщение отредактировал(а) threef - 4.4.2007, 12:49 |
|||
|
||||
Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
Простите, не совсем пойму, куда мне вставить все эти штуки __stdcall, __fastcall или __cdecl?
extern "C" вставил, но не помогло... Мне кажется проблема тут именно в том, что передается в функции, а не в функциях. Первая нормально срабатывает, а вот с параметрами отказываются. ![]() И еще, я что-то не пойму, в заголовке Дельфи след: TPPAVI = ^pointer; function InitAVIMemory (ppAVI:TPPAVI):integer; cdecl; external LibAVI; Если в функцию передается нетипизированный указатель на указатель, то как я могу выделить под него память? --------------------
|
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
выделить то не проблема, непонятно куда и сколько, можно только гадать, стоит поискать пример использования на том же Дельфи. интересный тип TPPAVI, видимо также существует тип TAVI? Неизвестно, что он из себя представляет? Видимо какая то структура, в любом случае вам надо будет найти информацию по этому вопросу, ведь не получится работать вслепую? |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Да, насчет cdecl не заметила.
Действительно, похоже, что дело в параметрах. Объявление действительно выглядит так, что IniAVIMemory сама выделяет память и записывает в параметр... А! попробуй так:
Понимаешь разницу? -------------------- ... |
|||
|
||||
Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
Earnest, да, спасибо, проблема была именно в этом. Нужно было просто посылать нормальный указатель
![]() --------------------
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |