Хорошо, так что, видимо, проблема была в
1.ImShow Требуется кадр для отображения, и «Нет», где в моем коде я присвоил «изображению» значение
ошибка: (-215: подтверждение не выполнено) size.width> 0 & amp; & amp; size.height> 0 в функции 'imshow'
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv )
{
VideoCapture vcap;
const string videoStreamAddress = "udp://<myIp>:<myPort>";
vcap.open(videoStreamAddress);
if(!vcap.isOpened())
{
printf("nope");
}
else
{
for(;;)
{
Mat frame;
vcap >> frame;
imshow("stuff", frame);
if( waitKey(10) == 27) break;
}
printf("Sucsess!");
}
return 0;
}
Возможно сочетание методов и функций C и Objective-C. Вот простой пример, в котором API SQLite используется в приложении для iPhone: ( сайт курса )
Загрузите Zip-файл (09_MySQLiteTableView.zip)
Функции C должны быть объявлены вне @implementation
в файле Objective-C (.m).
int MyCFunction(int num, void *data)
{
//code here...
}
@implementation
- (void)MyObjectiveCMethod:(int)number withData:(NSData *)data
{
//code here
}
@end
Поскольку функция C находится за пределами @implementation
, он не может вызывать такие методы, как
[self doSomething]
, и не имеет доступа к ivars.
Это можно обойти, если функция обратного вызова принимает userInfo
или параметр типа контекста
, обычно типа void *
. Это можно использовать для отправки любого объекта Objective-C функции C.
Как и в примере кода , этим можно управлять с помощью обычных операций Objective-C.
Кроме того, прочтите этот ответ: Смешивание функций C в классе Objective-C
Чтобы вызвать код Objective-C из обратного вызова C, я бы использовал что-то вроде:
void * refToSelf;
int cCallback()
{
[refToSelf someMethod:someArg];
}
@implementation SomeClass
- (id) init
{
self = [super init];
refToSelf = self;
}
- (void) someMethod:(int) someArg
{
}
В этой ситуации я всегда находил полезным создание оболочки Obj-C поверх C API. Реализуйте то, что вам нужно для использования функций C, и создайте класс Objective-C (или два) поверх него, так что это увидит весь внешний мир. Например, в случае такого обратного вызова вы можете создать функцию C, которая вызывает методы делегирования Obj-C для других объектов.
CAN / Как мне позвонить на объективный метод на месте этого?
Вы не можете.
CAN / I должен смешивать функцию C с моим вызовом Objective-C?
Да. Напишите функцию C и используйте это в качестве обратного вызова к функции CF.
Как смешивать функцию c с методами объектов C?
Вы можете установить Self
как Info
указатель в вашей структуре контекста. Это будет передано обратный вызов. Затем в обратном вызове, отличайте информацию
. Назад к указателю ID
:
MyClass *self = (id)info;
Затем вы можете отправить Self
сообщения. Вы до сих пор не можете напрямую доступа к переменным экземпляра, хотя, поскольку функция C является вне раздела @implementation
. Вам придется сделать их свойствами. Вы можете сделать это с расширением класса . (Вопреки того, что говорит этот документ, вы бы не объявили бы расширение внутри @implementation
, но в том же файле с ним, как правило, прямо над ним.)