Hi.

I am attempt to use btouch to bind to an obj-c library that needs to pass
data back and forth via structs.

Ultimately I want to bind to the Wahoo Fitness ANT+ API they have but have
built a test library just to ensure I get the mapping concepts working
before I attempt to bind to the real library.

Now I can bind everything I need with the exception of the struct.  I have a
separate file with the struct definition and have tried to include the
struct in the mappingFile itself.  The struct is named Stuff and the error I
get is : error CS0246: The type or namespace name `Stuff' could not be
found. Are you missing a using directive or an assembly reference?

now the interesting part is if I leave the struct in the mapping file and
include the separate struct file I get this error : Stuff.cs(7,23): error
CS0101: The namespace `TestOne' already contains a definition for `Stuff'
 So it appears to see the struct yet it wont let me bind anything with it.

Do I need to annotate the struct in some way for it to be used in btouch?

If I comment out the parts that use the struct the everything else works as
expected.

The command line I am using when the struct tis defined in the mapping file
is   
/Developer/MonoTouch/usr/bin/btouch libTestLib.cs 

and when I have the struct in a separate file i use:
 /Developer/MonoTouch/usr/bin/btouch libTestLib.cs -s:Stuff.cs  

 

Any help would be greatly appreciated.

Thanks,


Walt




Below are the files in question :

I have created a Obj-C Lib with the following header :
#import <Foundation/Foundation.h>

--begin heder
typedef unsigned char                  UCHAR;

typedef struct
{
        UCHAR messageSize;
        UCHAR messageId;
        UCHAR data1;
        UCHAR data2;
} Stuff;

@protocol StructDelegate
- (void)processStruct:(Stuff)antMessage;
@end

@protocol SimpleDelegate
- (NSString*)process:(NSString*)msg;
@end

@interface TestLib : NSObject
{
    id <StructDelegate> del;
    id<SimpleDelegate> sDel;
}
- (NSString *) RepeatAfterMe:(NSString*) repeatMe;
- (NSString*) SayHello;
- (int) HardCodedValue;
- (NSString*) Send:(Stuff) s;
+ (NSString*) classMethod;
- (void) save:(id <StructDelegate>) d;  
- (void) saveSimple:(id <SimpleDelegate>) d;  
- (NSString*) callSimple:(NSString*) s;              
@end

-- end header 


and I have a mapping file for bTouch as :

-- begin mapping file  (libTestLib.cs)


using System;
using MonoTouch.Foundation;
using System.Runtime.InteropServices;
using MonoTouch.ObjCRuntime;


namespace TestOne
{       
        [BaseType (typeof(NSObject))]  
        [Model]  
        interface StructDelegate
        {  
                [Export ("processStruct:")]  
        string processStruct (Stuff s);  
        }
        
        
        [BaseType (typeof(NSObject))]  
        [Model]  
        interface SimpleDelegate
        {  
                [Export ("process:")]  
        string process (string s);  
        }

        
        [BaseType (typeof (NSObject))]
        interface TestLib {
                [Export ("RepeatAfterMe:")]
                string RepeatAfterMe (string repeatMe);

                [Export ("SayHello")]
                string SayHello { get; }

                [Export ("HardCodedValue")]
                int HardCodedValue { get; }

                [Static, Export ("classMethod")]
                string ClassMethod { get; }
                
                [Export("saveSimple:")]
                void SaveSimple(SimpleDelegate del);
                
                [Export("callSimple:")]
                string CallSimple (string s);
                
                [Export ("save:")]
                void Save(StructDelegate d);
                
                [Export ("Send:")]
                string Send (Stuff s);
        }       

/*      
        [StructLayout(LayoutKind.Sequential)]
        [Serializable]
        public struct Stuff
        {
                public byte messageSize;
                public byte messageId;
                public byte data1;
                public byte data2;
        }
*/      

}

-- end mapping file

and I have a file for the struct that I pass in defined as :

-- begin struct file  (Stuff.cs)
using System;

namespace TestOne
{
        //[StructLayout(LayoutKind.Sequential)]
        [Serializable ]
        public struct Stuff
        {
                public byte messageSize;
                public byte messageId;
                public byte data1;
                public byte data2;
        }
}
-end struct file

--
View this message in context: 
http://monotouch.2284126.n4.nabble.com/btouch-and-structs-tp3843442p3843442.html
Sent from the MonoTouch mailing list archive at Nabble.com.
_______________________________________________
MonoTouch mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/monotouch

Reply via email to