Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C#
Hi all,
 
Currently I'm working on Blusoleil SDK[^]. I have to create a wrapper for their library.
I have a problem on registering the callback function. The definition is something like this:
 
C++
--------
Prototype Function:
BTINT32	Btsdk_RegisterGetStatusInfoCB4ThirdParty(
Func_ReceiveBluetoothStatusInfo* statusCBK);
 
typedef void Func_ReceiveBluetoothStatusInfo(
ULONG usMsgType, ULONG pulData, ULONG param, BTUINT8 *arg);
C#
------
[DllImport("BsSdk.dll")]
        [return: MarshalAs(UnmanagedType.U4)]
        public static extern Int32  Btsdk_RegisterGetStatusInfoCB4ThirdParty(ref Func_ReceiveBluetoothStatusInfo statusCBK);
 
public delegate void  Func_ReceiveBluetoothStatusInfo (UInt32 usMsgType,UInt32 pulData,UInt32 param, ref Byte arg);
Function to test the call back :
public static void Test_RegisterGetStatusCBK()
        {
            Func_ReceiveBluetoothStatusInfo Bd = BsStatusCBKFuc;
            /* register callback function to get the status change of BlueSoleil. */
            Btsdk_RegisterGetStatusInfoCB4ThirdParty(ref Bd);
            
        }
public static void BsStatusCBKFuc(UInt32 usMsgType, UInt32 pucData, UInt32 param, ref Byte arg)
        {
            /* message received */
            switch (usMsgType)
            {
                case Hndle.BTSDK_BLUETOOTH_STATUS_FLAG:
                    {
                        switch (pucData)
                        {
                            case (uint)BluetoothState.BTSDK_BTSTATUS_TURNON:
                                {
                                    //printf("MSG: Bluetooth is turned on.\n");
                                    MessageBox.Show(@"Bluetooth is turned on");
                                    break;
                                }
                        }
                    }    
              
            }
The problem is, that the callback function doesn't hit anymore. It seem the Btsdk_RegisterGetStatusInfoCB4ThirdParty is not succesfull. Can anyone give me an idea? Was my method wrong?
Posted 24-Jan-11 18:09pm
Pdaus1.3K
Edited 24-Jan-11 20:35pm
Indivara32.8K
v3

1 solution

Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

I think, first bug I can spot is the keyword ref in delegate parameter of [DllImport]Btsdk_RegisterGetStatusInfoCB4ThirdParty: you need to remove it. (A delegate instance is of reference type, that's why.)
 
For delegate marshalling, see, for example: http://bytes.com/topic/c-sharp/answers/229011-hooks-delegates-callbacks[^].
 
Also, Google:
 
marshall callbacks and delegates "C#"
 
— a lot of quite relevant matter.
 
Please comment on your progress.
 
Thank you,
—SA
  Permalink  
Comments
Pdaus at 25-Jan-11 5:15am
   
Thanks for ur guide SA... Now can hit the callback function..:-)
SAKryukov at 25-Jan-11 13:48pm
   
I'm happy it worked.
Good luck!
--SA
Espen Harlinn at 6-Feb-11 14:40pm
   
Good answer, as usual :)
SAKryukov at 6-Feb-11 18:11pm
   
Thank you. I reported only the first problem I spotted, was surprised it was enough for the OP fix.
--SA

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 510
1 Prakriti Goyal 255
2 Yogesh Kumar Tyagi 224
3 Maciej Los 195
4 CPallini 180
0 OriginalGriff 6,632
1 Sergey Alexandrovich Kryukov 5,429
2 Maciej Los 3,474
3 Peter Leow 3,309
4 DamithSL 2,495


Advertise | Privacy | Mobile
Web02 | 2.8.140721.1 | Last Updated 25 Jan 2011
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100