Беда с vtable - это я или библиотека? - PullRequest
1 голос
/ 01 июня 2009

Я пытаюсь использовать библиотеку COM, которая использует vtable. Однако после того, как я вызываю функции, в стеке происходит что-то интересное, что говорит мне, что я что-то делаю не так.

Файл заголовка с определением vtable вставляется здесь: pastebin.com / m2d66c18c (см., В частности, код, начинающийся со строки 810). Пример вставлен здесь: pastebin.com / m1b46e662 .

Таблица заполняется правильными местоположениями для функций, но когда я вызываю функцию (и), они, кажется, ищут неправильные местоположения для аргументов в стеке. Кроме того, после вызова функций в таблице, стек испортился, и моя программа падает. Я попытался изменить тип функции на __cdecl и __stdcall, но это ничего не дает.

Это либо мой код, либо библиотека, и компания, написавшая библиотеку, мне не ответила - потому что я полагаю, что это выходные. Кроме того, есть демонстрационное приложение, которое использует библиотеку, и это работает - так что я думаю, что это мой код / ​​компилятор (gcc) / что-то еще, а не библиотека.

Может ли быть что-то конкретное, что вам нужно сделать, чтобы использовать библиотеку COM?

...