__stdcall 与 JNR

Posted

技术标签:

【中文标题】__stdcall 与 JNR【英文标题】:__stdcall with JNR 【发布时间】:2016-06-22 12:27:30 【问题描述】:

我正在使用 JNR 并尝试调用 __stdcall 函数。我已经尝试使用stdcall() 约定加载库:

mTemplateApi = LibraryLoader.create(FPTemplateAPI.class).stdcall().load("FPTemplateAPI");

并尝试用@StdCall注释方法。

public interface FPTemplateAP  

    @StdCall
    Pointer CreateTemplateImage(@In ByteBuffer aTemplate,
                                @Out IntByReference aWidth,
                                @Out IntByReference aHeight,
                                @In boolean aColor);


结果当我尝试调用方法时出现以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: The operation completed successfully.

at jnr.ffi.provider.jffi.AsmRuntime.newUnsatisifiedLinkError(AsmRuntime.java:40)

【问题讨论】:

顺便在JNR github上发了issuegithub.com/jnr/jnr-ffi/issues/65 【参考方案1】:

现在我创建了另一个 dll,它委托给 __stdcall dll,但使用 __cdecl,它非常适合我。

【讨论】:

以上是关于__stdcall 与 JNR的主要内容,如果未能解决你的问题,请参考以下文章

函数调用方法之__cdecl与_stdcall

_stdcall 与 _cdecl 区别

_stdcall 与 _cdecl 区别

__cdecl__stdcall__fastcall 与 __pascal 浅析

深入体会__cdecl与__stdcall

_cdecl 与 _stdcall 区别