2010-02-02 31 views
0

我有一个与WOsclib的小问题。不是特别在图书馆,它更多的是回调函数。聆听特定的osc命令,我必须忍受一些回调方法,如Objective-C在C++中 - 超出范围

void TheOscStartMethod::Method(
          const WOscMessage *message, 
          const WOscTimeTag& when, 
          const TheNetReturnAddress* networkReturnAddress) 
{ 
    std::cout << "Got the start signal"; 
    start.alpha = 1.0; 
} 

start is IBOutlet UIImageView。

但编译器说我,那开始超出了范围。如果我尝试访问obj-c代码中的开始,它应该像它应该那样工作。

我该如何将我的Objective C对象放入c代码或至少调用一个objective-c函数。

谢谢

+1

你在哪里申报开始? – MrMage 2010-02-02 17:44:54

回答

0

解决方案:

我不知道这是否是做的最好的方式,但它的工作原理。

必须有一个空的c对象,以后将成为我们的目标c对象,它包含我们想要访问的所有东西。

static gsSearchForIp* delegate = NULL; 

我们必须定义一个函数来设置目标对象c

void setCallbackDelegate(gsSearchForIp* del) 
{ 
    delegate = del; 
} 

然后调用它。 (我在initWithFrame方法中调用它)

setCallbackDelegate(self); 

现在我可以在我的C++方法调用的方法与[delegate methodName:firstPara]。在这个函数中,我可以从gsSearchForIp类访问我需要的所有东西。

1

请与扩展.mm客观的C++文件,然后就可以调用对象的C和C++对象在同一代码的文件。

的XCode将调用从文件扩展名的正确的编译器(即加入-x的Objective-C++的编译命令)

这并不是说C++和Objective C的是不同的语言和不理解对方的对象,因此移动他们之间的数据,你将需要将数据转换为C类型,例如void,char int和指向它们的指针。

+0

哼,我已经这样做了,不是文件扩展名,而是在信息面板中。它现在看起来像这样:http://grab.by/28Ld – Philip 2010-02-02 17:33:37

+0

然后我认为这不是问题。我们需要查看开始类的标题? – Mark 2010-02-02 17:54:02

+0

就像我说的,'start'是一个UIViewImage.maybe我应该选择一个更好的例子。 “开始”可能是一种方法。 '[self methodName]'也不起作用。 – Philip 2010-02-02 20:12:41

1

听起来像start是一个属于某个Objective-C对象的实例变量,并且您试图通过从C++对象中写入其名称来访问它。如果是这种情况,应该很明显为什么它不起作用:C++对象不知道任何关于start的内容。解决方法是以某种方式为C++对象提供对拥有start的Objective-C对象的引用。

+0

我很高兴知道这是怎么工作:) – Philip 2010-02-02 20:14:25

+0

我的解释尽可能具体。对于你如何去做没有一般的答案。你必须构建你的程序,以便你的代码知道它需要的数据。这个程序结构具体是什么样的,取决于程序的细节,我们在这里没有。 – Chuck 2010-02-02 21:22:41

+0

UFF,现在我感觉就像在挖掘我完全不知道的东西。但我们试试吧。 我有一个正常的AppDelegate,其中包含一些按钮和标签。这对我来说很好。困难的部分是我正在使用的OSC库。那个是用C++编写的,但是与平台无关。我实现了它,它工作。我可以通过网络发送接收osc信号。现在,如果我得到一个osc信号,一个特定的方法被称为C++方法。那是我的问题开始。我想用这种方法来改变界面。不知道这是否有助于指定我的情况?谢谢你:) – Philip 2010-02-02 23:05:43

0

您必须使起始对象可用于其他代码。

你可以通过它,你可以传递你将要使用的部分,你可以为两个代码库创建一个API来使用。还有其他的选择为好,完全取决于正是你希望如何使用的各种对象