代码之家  ›  专栏  ›  技术社区  ›  Dewfy

外部“c”在MSVC++9.0中没有效果

  •  3
  • Dewfy  · 技术社区  · 15 年前

    我为两个编译器管理JNI项目:msvc++8.0和9.0, 我的cpp文件包含以下实现: 外部“C”{ jniexport jlong jnicall Java_-Context_-ServiceProviderContext_-StartServiceProvider (jnienv*env,jclass,jstring jspath){ … }

    借助depends.exe实用程序,我可以看到msvc 8.0成功地按预期导出函数: Java_-Context_-ServiceProviderContext_-StartServiceProvider 但是在msvc 9.0下编译会让我疯狂,它输出时完全忽略了外部的“c”。depends.exe显示: _ Java_-Context_-ServiceProviderContext_-StartServiceProvider@12

    有人知道9.0项目中导致这种行为的确切原因吗?

    2 回复  |  直到 13 年前
        1
  •  1
  •   MSN    15 年前

    JNICALL 可能是 #define JNICALL __stdcall . 更改调用约定将修复名称装饰,但它将可怕地(包括无声地)破坏JNI,因为它将调用一个假定为 __stdcall 去买点别的东西。

    它真的不起作用吗?从我的谷歌搜索结果来看,JVM似乎知道如何正确地修饰函数名。

        2
  •  0
  •   user9876    15 年前

    这是stdcall调用约定;您需要cdecl。也许可以尝试在函数的定义中添加uu cdecl?

    或者,更改项目设置中的默认调用约定。