【问题标题】:iOS native code compile error, use of undeclared identifier 'threadStateData', expanded from macro 'CN1_THREAD_STATE_PASS_SINGLE_ARG'iOS 本机代码编译错误,使用未声明的标识符“threadStateData”,从宏“CN1_THREAD_STATE_PASS_SINGLE_ARG”扩展
【发布时间】:2019-06-09 21:42:43
【问题描述】:

我正在尝试从原生 iOS 代码为 AdMob 实现回调,这是我的代码, com_manyukhin_cerebrate_words_synonyms_NativeInterstitialAdsInterfaceImpl.h:

#include "CodenameOne_GLViewController.h"
#include "com_manyukhin_cerebrate_words_synonyms_WordsSynonyms.h"

com_manyukhin_cerebrate_words_synonyms_NativeInterstitialAdsInterfaceImpl.m:

#import "com_manyukhin_cerebrate_words_synonyms_NativeInterstitialAdsInterfaceImpl.h"

- (void) interstitialDidDismissScreen:(GADInterstitial *)ad {
    com_manyukhin_cerebrate_words_synonyms_WordsSynonyms_onInterstitialClosed__(CN1_THREAD_STATE_PASS_SINGLE_ARG);
}

但我收到了涉及 CN1_THREAD_STATE_PASS_SINGLE_ARG 定义的编译错误:

/var/folders/p_/xlvwhg4101z8r81_nl13cds80000gn/T/build6871177334585892440xxx/dist/WordsSynonyms-src/com_manyukhin_cerebrate_words_synonyms_NativeInterstitialAdsInterfaceImpl.m:59:78: error: use of undeclared identifier 'threadStateData'
        com_manyukhin_cerebrate_words_synonyms_WordsSynonyms_onInterstitialClosed__(CN1_THREAD_STATE_PASS_SINGLE_ARG);
                                                                                    ^
In file included from /var/folders/p_/xlvwhg4101z8r81_nl13cds80000gn/T/build6871177334585892440xxx/dist/WordsSynonyms-src/com_manyukhin_cerebrate_words_synonyms_NativeInterstitialAdsInterfaceImpl.m:1:
In file included from /var/folders/p_/xlvwhg4101z8r81_nl13cds80000gn/T/build6871177334585892440xxx/dist/WordsSynonyms-src/WordsSynonyms-Prefix.pch:18:
/var/folders/p_/xlvwhg4101z8r81_nl13cds80000gn/T/build6871177334585892440xxx/dist/WordsSynonyms-src/cn1_globals.h:781:42: note: expanded from macro 'CN1_THREAD_STATE_PASS_SINGLE_ARG'
#define CN1_THREAD_STATE_PASS_SINGLE_ARG threadStateData
                                         ^

有什么办法解决这个问题吗?

有趣的是,同一 .m 文件中的以下代码(不同的宏)不会触发错误:

- (void) interstitial:(GADInterstitial *)ad didFailToReceiveAdWithError:(GADRequestError *)error {  
    com_manyukhin_cerebrate_words_synonyms_WordsSynonyms_onInterstitialFaliedToLoad___int(CN1_THREAD_GET_STATE_PASS_ARG -1);
}

【问题讨论】:

    标签: ios codenameone


    【解决方案1】:

    这些是这样定义的:

    #define CODENAME_ONE_THREAD_STATE struct ThreadLocalData* threadStateData
    
    #define CN1_THREAD_STATE_SINGLE_ARG CODENAME_ONE_THREAD_STATE
    #define CN1_THREAD_STATE_MULTI_ARG CODENAME_ONE_THREAD_STATE,
    #define CN1_THREAD_STATE_PASS_ARG threadStateData,
    #define CN1_THREAD_STATE_PASS_SINGLE_ARG threadStateData
    #define CN1_THREAD_GET_STATE_PASS_ARG getThreadLocalData(),
    #define CN1_THREAD_GET_STATE_PASS_SINGLE_ARG getThreadLocalData()
    

    所以你需要使用CN1_THREAD_GET_STATE_PASS_SINGLE_ARG。我不确定为什么在同一个文件中不会失败。修复此调用后,它可能会失败。

    【讨论】:

    • 有帮助,编译成功,谢谢!但请注意,我从这里获取了代码示例:Advanced Topics/Under the Hood,回调示例中有CN1_THREAD_STATE_PASS_SINGLE_ARG(没有_GET),相同的here
    • 谢谢。这是我们在代码中使用的始终传递变量的方法,因此方法声明包含该变量。我会解决的。请注意,您也可以自己在 wiki 中修复该问题:github.com/codenameone/CodenameOne/wiki/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2020-12-19
    • 1970-01-01
    • 2020-08-10
    • 2022-03-09
    • 1970-01-01
    相关资源
    最近更新 更多