gpt4 book ai didi

c# - Monotouch 绑定(bind)到 Linea Pro SDK

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:53 26 4
gpt4 key购买 nike

我正在尝试创建与 Linea Pro(这是他们在 Lowes Apple Stores 中使用的条形码扫描仪)SDK 的绑定(bind)。我正在使用 David Sandor's绑定(bind)作为引用,但 SDK 自 2011 年 1 月以来已经更新了几次。

除了 playSound 调用外,我的大部分功能都正常,它用于在 Linea Pro 设备上播放声音。

SDK 中的 .h 文件调用如下:

-(BOOL)playSound:(int)volume beepData:(int *)data length:(int)length error:(NSError **)error;

我试过使用 int[]、NSArray 和一个指向 int[] 的 IntPtr,但似乎没有任何效果。

我的绑定(bind)最后一次失败的迭代看起来像:

[Export ("playSound:beepData:length:")]
void PlaySound (int volume, NSArray data, int length);

现在,这根本不起作用。另请注意,我也不知道如何处理 error:(NSError **)error 部分。

我对 C 不太熟悉,所以非常感谢任何帮助。

最佳答案

除非 Objective-C 代码使用 NSArray,否则您不能使用 NSArray,即生成器允许我们将一些 ObjC 构造映射到 .NET 类型(例如 NSString string) 但它不允许您重新定义 ObjC 类型。

-(BOOL)playSound:(int)volume beepData:(int *)data length:(int)length error:(NSError **)error;

应该是这样的:

[Export ("playSound:beepData:length:error:")]
bool PlaySound (int volume, IntPtr data, int length, out NSError error);

您需要将您的数据编码为IntPtr

IntPtr data = Marshal.AllocHGlobal (length);
Marshal.WriteInt32 (data1, 0);

然后释放它。

Marshal.FreeHGlobal (data);

最好使用调用您的内部 绑定(bind)的公共(public)辅助方法来完成。您可以通过将 [Internal] 属性添加到它的定义来使 PlaySound 方法成为 internal。于是就变成了:

[Export ("playSound:beepData:length:error:")][Internal]
bool PlaySound (int volume, IntPtr data, int length, out NSError error);

并且您在绑定(bind)中包含以下代码(例如 API.cs):

bool PlaySound (int volume, int[] data)
{
// I assume length is byte-based (check the docs)
int length = data.Length * 4;
IntPtr p = Marshal.AllocHGlobal (length);
int j = 0;
for (int i=0; i < length; i+=4)
Marshal.WriteInt32 (p [j++], i);
NSError error;
bool result = PlaySound (volume, p, length, out error);
// free memory before throwing the exception (if any)
Marshal.FreeHGlobal (data);
if (error != null)
throw new Exception (error.LocalizedDescription);
return result;
}

注意:完全没有尝试过 :-) 我没有硬件、SDK 或文档。 YMMV 但这应该很接近。

关于c# - Monotouch 绑定(bind)到 Linea Pro SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12442740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com