0

//------------------------------------------------ --------------------

更新:我搞砸了。我在我的 AppDelegate->onApplicationWillResignActive 中直接调用了 openfeint,这导致了编译器 C++ 错误。

我的请求,如果有人想尝试同样的事情,单身人士确实可以工作。只要确保在 .m 文件中包含头文件,而不是头文件。

//------------------------------------------------ --------------------

我正在构建一个 iPhone 应用程序,并使用用 C++ 编写的 Openfeint SDK/Library/Framework (??)。

我想知道,是否可以编写一个与 C++ 接口的类,这样我就不必将我的 ObjC 类更改为 .mm 文件。

我尝试创建一个单例,希望可以将它的标头包含在普通 .m 文件中,但这不起作用,我仍然需要制作包含标头 .mm 的文件

我想这样做(或类似的事情)的原因是因为我没有使用 C++ 的经验,并且将 ObjC 更改为 C++ 文件会导致错误和警告。

这是我创建的单例...

// --------------------------------------------------------------------
//  OpenfeintController.h
// --------------------------------------------------------------------
#import <Foundation/Foundation.h>

@interface OpenfeintController : NSObject {

    NSString *productKey, *secretKey, *displayName;

}

+(OpenfeintController*)sharedOpenfeintController;

- (void) initializeWithProductKey:(NSString *)pKey andSecretKey:(NSString *)sKey andDisplayName:dName;

- (void) launchOpenFeint;

- (void) submitHighScoreToLeaderboard:(NSString *)leaderboardId;

@end

实施

// --------------------------------------------------------------------
//  OpenfeintController.mm
// --------------------------------------------------------------------

#import "OpenfeintController.h"
#import "OpenFeint.h"

static OpenfeintController *singletonOpenfeintController = nil;

@implementation OpenfeintController

+(OpenfeintController*)sharedOpenfeintController {
    @synchronized(self) {
        if (!singletonOpenfeintController) {
            singletonOpenfeintController = [[OpenfeintController alloc] init];
        }
    }
    return singletonOpenfeintController;
}



- (void) initializeWithProductKey:(NSString *)pKey andSecretKey:(NSString *)sKey andDisplayName:dName
{
    //[OpenFeint initializeWithProductKey:pKey andSecret:sKey andDisplayName:dName andSettings:nil andDelegates:nil];
}

- (void) launchOpenFeint
{

}

- (void) submitHighScoreToLeaderboard:(NSString *)leaderboardId
{

}

@end
4

2 回答 2

2

这当然是可以做到的,不幸的是,您并没有真正提供任何可以帮助我们确定您遇到的问题的信息。您说OpenfeintController.h标头的用户需要是 Objective-C++,但您发布的标头中似乎没有包含任何 C++(因此这不是必需的)。

如果在您执行此操作时编译出现错误,请发布错误,以便我们查看实际发生的情况。

于 2009-12-11T14:47:07.090 回答
0

我用不同的 C++ 库( GeographicLib )做了类似的事情,它没有问题。只需确保您的 .h 文件中没有 C++ 代码或导入的 C++ 标头即可。不过,我认为您的代码没有任何问题,所以恐怕我无法真正帮助您。我没有使用 OpenFeint 的经验。

于 2009-12-11T13:45:38.170 回答