簡體   English   中英

OpenWatcom / VisualStudio在調用約定中的互操作性

[英]OpenWatcom / VisualStudio interoperability in re calling conventions

我想用OpenWatcom編譯一個Photoshop濾鏡插件。 該代碼已經存在,並且可以與Visual Studio完美配合。

該函數如下所示:

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

它在Visual C ++中可以完美地工作。 請注意,沒有明確指定任何調用約定(Adobe在其SDK頭文件中未定義任何調用約定)。

盡管它在VC ++中有效,但在OpenWatcom中卻不起作用,並且似乎調用約定不正確。 (即使使用“ HelloWorld”功能,我也會得到奇怪的行為,如損壞的堆棧)。

在Wikipedia上,我查看了具有調用約定的表該表說 ,如果未指定調用約定,則Watcom會將參數放入寄存器“ EAX,EDX,EBX,ECX”,堆棧從右向左填充,被調用方清除堆。 但是,該表未說明如果未指定調用約定,Microsoft編譯器會做什么。 我確實認為Visual Studio使用不同的調用約定作為默認值。 於是,我就指定__stdcall__cdecl__pascal在OpenWatcom,但它並沒有多大幫助。

我的問題之一是,如果未指定任何內容,Visual Studio的默認調用約定到底是什么? 究竟將什么內容放入寄存器中,在堆棧上的哪個方向上,誰清理堆棧? 我在任何地方都找不到此信息。

如果我知道確切的行為,我是否可以使用OpenWatcom中的“ #pragma aux”功能來實施自定義調用約定?

還是您知道我可以嘗試在OpenWatcom中修復調用約定的其他內容?

(從評論中移出)

盡管可以通過命令行開關( /Gd/Gr/Gv/Gz )進行更改 ,但Visual C ++中的默認調用約定為cdecl

-ecc閱讀一下,似乎Watcom也具有類似的選項集-ecc應該將其默認設置為使用cdecl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM