2014-09-25 8 views
0

Я пытаюсь связать следующую функцию из библиотеки Objective-C в Xamarin.Xamarin binding byte [] или NSObject []

/*! 
* This function writes data to the device. 
* 
* @param writeBuffer Pointer to a byte buffer containing the write data. 
* @param offset  Amount of data that was already written. 
* @param size  Amount of data left to write. 
* 
* @return Amount of data written. 
* 
* @note Throws PortException on failure. 
*/ 
- (u_int32_t)writePort:(u_int8_t const *)writeBuffer :(u_int32_t)offSet :(u_int32_t)size; 

Я не могу определить, какой тип данных должен быть для writeBuffer.

[Export ("writePort:::")] 
    Int32 WritePort (Byte[] writeBuffer, int offSet, int size); 

Я попытался Byte [] (как показано выше), но я получаю следующее сообщение об ошибке:

/Projects/StarIOBinding/StarIOBinding/obj/Debug/ios/StarIO/SMPort.g.cs(34,34): Error CS1502: The best overloaded method match for `MonoTouch.Foundation.NSArray.FromNSObjects(params MonoTouch.Foundation.NSObject[])' has some invalid arguments (CS1502) (StarIOBinding) 

Затем я попробовал:

[Export ("writePort:::")] 
    Int32 WritePort (NSObject[] writeBuffer, int offSet, int size); 

Который затем компилирует - но при запуске команда, я не получаю ожидаемого результата. Я отправляю ему байт [], завернутый в NSObject. Является ли NSObject правильным параметром и где я ошибаюсь?

Редактировать: При использовании IntPtr я все равно не получаю выход. Могу ли я просто подтвердить, что делаю это правильно? Мои связывания:

[Export ("writePort:::")] 
    Int32 WritePort (IntPtr writeBuffer, int offSet, int size); 

И когда я звоню его:

IntPtr test = System.Runtime.InteropServices.Marshal.AllocHGlobal(myByteArray.Length); 
    System.Runtime.InteropServices.Marshal.Copy(myByteArray, 0, test, myByteArray.Length); 
    SMPort devPort = SMPort.GetPort ("TCP:10.0.1.4", "", 5); 
    int count = devPort.WritePort (test, 0, myByteArray.Length); 

ответ

2

Вы должны использовать IntPtr в переплетах и ​​использовать Marshal класс, чтобы скопировать байты назад и вперед.

+0

Спасибо за помощь. Я обновил свой вопрос, теперь я правильно его назвал? – Joseph

+0

Да, это выглядит правильно. Как это происходит? –

+0

Это привязка для принтера чека. Сейчас я не получаю никаких ошибок, но квитанция не печатается! :(Я предполагаю, что это должно быть связано с тем, как я отправляю свой байтовый массив на принтер, но мое понимание Objective-C затрудняет понимание, где я ошибаюсь. – Joseph

Смежные вопросы