Click here to Skip to main content
15,664,823 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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:

Prototype Function:
BTINT32	Btsdk_RegisterGetStatusInfoCB4ThirdParty(
Func_ReceiveBluetoothStatusInfo* statusCBK);

typedef void Func_ReceiveBluetoothStatusInfo(
ULONG usMsgType, ULONG pulData, ULONG param, BTUINT8 *arg);

        [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");

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?
Updated 24-Jan-11 20:35pm

1 solution

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:[^].

Also, Google:

marshall callbacks and delegates "C#"

— a lot of quite relevant matter.

Please comment on your progress.

Thank you,
Share this answer
Pdaus 25-Jan-11 5:15am    
Thanks for ur guide SA... Now can hit the callback function..:-)
Sergey Alexandrovich Kryukov 25-Jan-11 13:48pm    
I'm happy it worked.
Good luck!
Espen Harlinn 6-Feb-11 14:40pm    
Good answer, as usual :)
Sergey Alexandrovich Kryukov 6-Feb-11 18:11pm    
Thank you. I reported only the first problem I spotted, was surprised it was enough for the OP fix.

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

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900