Я пытаюсь связать следующую функцию из библиотеки 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);
Спасибо за помощь. Я обновил свой вопрос, теперь я правильно его назвал? – Joseph
Да, это выглядит правильно. Как это происходит? –
Это привязка для принтера чека. Сейчас я не получаю никаких ошибок, но квитанция не печатается! :(Я предполагаю, что это должно быть связано с тем, как я отправляю свой байтовый массив на принтер, но мое понимание Objective-C затрудняет понимание, где я ошибаюсь. – Joseph