无法从Delphi 10.3 Rio中的iOS API函数(框架)获得CFStringRef
值
// external call bridge function to iOS:
function MIDIObjectGetStringProperty(obj: MIDIObjectRef;
propertyID: CFStringRef;
out str: CFStringRef):OSStatus; cdecl; external libCoreMidi name _PU + 'MIDIObjectGetStringProperty';
功能MIDIObjectGetStringProperty
(iOS CoreMIDI功能)以MIDI端口的str:CFStringRef
名称返回...
如何在Delphi中获取CFString
变量的值?在此示例中,str:CFStringRef
值?
我在功能中尝试过:]]
function getDisplayName(obj: MIDIEndpointRef):string; var EndPointName: CFStringRef; i:integer; begin //EndPointName:= nil; // when I assign nil value, function return i=-50 otherwise raise Access Violation error ... i := MIDIObjectGetStringProperty(obj, kMIDIPropertyDisplayName , EndPointName); --> AV error !!! //in EndPointName should be returned CFStringRef value from iOS getDisplayName := CFToDelphiString(EndPointName); // convert to string end;
可能需要分配
EndPointName
...否则我给出了AV错误。请有人解决方案如何从iOS框架获取ANYCFStringRef
值并将其转换为字符串?谢谢。
添加:
我通过FireMonkey frameforks api在Delphi Rio中构建了跨平台(iOS,Android,W64)应用程序-对于CoreMIDI,我使用此界面https://github.com/FMXExpress/ios-object-pascal-wrapper/blob/master/iOSapi.CoreMIDI.pas
因此,外部调用和常量在iOSapi.CoreMIDI中定义:
function MIDIObjectGetStringProperty (obj: MIDIObjectRef; propertyID: CFStringRef; str: CFStringRef) : OSStatus; cdecl; external libCoreMIDI name _PU + 'MIDIObjectGetStringProperty';
和iOS指针const:
function kMIDIPropertyDisplayName: Pointer; begin Result := CocoaPointerConst(libCoreMIDI, 'kMIDIPropertyDisplayName'); end;
基于此解决方案https://pjstrnad.com/reading-data-midi-keyboard-ios-probably-also-mac/,[Otherwies编译的应用程序在真实的iOS(iPad)上运行非常好(从连接的MIDI键盘读取MIDI消息)
obj:MIDIObjectRef是来自源的源指针:= MIDIGetSource(ci);
问题正在调用API函数MIDIObjectGetStringProperty。在指针str中:CFStringRef(EndPointName)应该为MIDIportNAME的VALUE。我无法获取此值并解析为delphi字符串...
我尝试将这个Poiter CFStringRef声明为:
var EndPointName: pointer; EndPointName1: array of Byte; EndPointName2: TBytes; EndPointName3: TPtrWrapper; M: TMarshaller;
和构造为:
SetLength(EndPointName1, 255); GetMem(EndPointName2,255); EndPointName3 := M.AllocMem(255); i := MIDIObjectGetStringProperty(obj, kMIDIPropertyDisplayName , @EndPointNameX);
->无效,AV错误!
我必须解决方案,如何获取CFStringRef并转换为delphi字符串...
无法从Delphi 10.3 Rio中的iOS API函数(框架)获取CFStringRef值//到iOS的外部调用桥函数:函数MIDIObjectGetStringProperty(obj:MIDIObjectRef; ...
kMIDIPropertyDisplayName
在iOS上已损坏,但您可以将其替换为CFSTR('displayName')。这个对我有用。因此,您的函数如下所示: