I am creating an Xamarin ios application which uses Socket Mobile’s SocketScan SDK. Created a Binding project to convert the static library to dll. But not able to create instance of ISktScanObject using SktClassFactory.CreateScanObject () method. The instance is not getting created completely due to System.MemberAccessException. Please see the below code
// A 1:1 of ApiHelper's Objective-C open: method
public void Open ()
{
_deviceInfoList.Clear ();
if (_noDeviceText != null) {
_deviceInfoList.Add (_noDeviceText, _noDeviceText);
}
if (_scanObjectReceived != null) {
SktClassFactory.ReleaseScanObject (_scanObjectReceived);
}
_scanObjectReceived = SktClassFactory.CreateScanObject (); //Two properties inside _scanObjectReceived are not getting created due to System.MemberAccessException.
Task.Run (() => InitializeScanAPIThread ());
_scanApiOpen = true;
}
Below are the exception messages i get on debugging the _scanObjectReceived object after the line _scanObjectReceived = SktClassFactory.CreateScanObject ();
- Msg System.MemberAccessException: Cannot create an instance of ScanAPI.ISktScanMsg because it is an abstract class
- Property System.MemberAccessException: Cannot create an instance of ScanAPI.SktScanProperty because it is an abstract class
ApiDefinition for the ISktScanObject interface in binding project is as below:
[Protocol, Model]
interface ISktScanObject {}
// @protocol ISktScanObject
[Protocol, Model]
[BaseType (typeof (NSObject))]
interface SktScanObject : ISktScanObject
{
// @required -(id<ISktScanMsg>)Msg;
[Abstract]
[Export ("Msg")]
ISktScanMsg Msg { get; }
// @required -(id<ISktScanProperty>)Property;
[Abstract]
[Export ("Property")]
SktScanProperty Property { get; }
}
ApiDefinition for the SktClassFactory interface in binding project is as below:
[BaseType (typeof(NSObject))]
interface SktClassFactory
{
// +(id<ISktScanObject>)createScanObject;
[Static]
[Export ("createScanObject")]
ISktScanObject CreateScanObject ();
// +(void)releaseScanObject:(id<ISktScanObject>)scanObj;
[Static]
[Export ("releaseScanObject:")]
void ReleaseScanObject (ISktScanObject scanObj);
// +(id<ISktScanApi>)createScanApiInstance;
[Static]
[Export ("createScanApiInstance")]
ISktScanApi CreateScanApiInstance ();
// +(void)releaseScanApiInstance:(id<ISktScanApi>)scanApi;
[Static]
[Export ("releaseScanApiInstance:")]
void ReleaseScanApiInstance (ISktScanApi scanApi);
// +(id<ISktScanDevice>)createDeviceInstance:(id<ISktScanApi>)scanApi;
[Static]
[Export ("createDeviceInstance:")]
ISktScanDevice CreateDeviceInstance (ISktScanApi scanApi);
// +(void)releaseDeviceInstance:(id<ISktScanDevice>)deviceInstance;
[Static]
[Export ("releaseDeviceInstance:")]
void ReleaseDeviceInstance (ISktScanDevice deviceInstance);
}
What needs to be done to properly instantiate the _scanObjectReceived object. Thanks in advance.