Совместимость OpenWatcom / VisualStudio в соглашениях о повторных вызовах

Я хотел бы скомпилировать плагин Photoshop Filter с OpenWatcom.
Код уже существует и отлично работает с Visual Studio.

Функция выглядит так:

extern "C" __declspec(export) void PluginMain(short selector, FilterRecordPtr pb, intptr_t *data, short *result);

Он отлично работает в Visual C ++. Обратите внимание, что явно не указано соглашение о вызовах (Adobe не определяет никаких соглашений о вызовах в своих заголовочных файлах SDK).

Хотя это работает в VC ++, в OpenWatcom это не работает, и кажется, что соглашение о вызовах неверно. (Я получаю странное поведение, такое как поврежденный стек, даже с функцией HelloWorld).

В Википедии я посмотрел на таблицу с соглашениями о вызовах: Таблица говорит что если соглашение о вызовах не указано, Watcom помещает параметры в регистры «EAX, EDX, EBX, ECX», стек заполняется справа налево, а вызываемый абонент очищает стек. Но в таблице не указано, что делают компиляторы Microsoft, если не указано соглашение о вызовах.
Я действительно думаю, что Visual Studio использует другое соглашение о вызовах по умолчанию.
Поэтому я попытался уточнить __stdcall, __cdecl или же __pascal в OpenWatcom, но это не сильно помогло.

Один из моих вопросов: что такое соглашение о вызовах по умолчанию в Visual Studio, если ничего не указано? Что именно поместит в регистры, в каком направлении в стеке, и кто очищает стек? Я не мог найти эту информацию нигде.

Если бы я знал точное поведение, я мог бы использовать функциональность «#pragma aux» в OpenWatcom, чтобы обеспечить соблюдение пользовательского соглашения о вызовах?

Или вы знаете что-то еще, что я могу попробовать исправить соглашение о вызовах в OpenWatcom?

0

Решение

(переход от комментария)

Соглашение о вызовах по умолчанию в Visual C ++: Cdecl, хотя это можно изменить с помощью переключателя командной строки (/Gd, /Gr, /Gv, /Gz).

Читая вокруг, кажется, что у Watcom есть аналогичный набор опций — -ecc следует установить его для использования cdecl по умолчанию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]