Click here to Skip to main content
Rate this: bad
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:
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?
Posted 24-Jan-11 18:09pm
Edited 24-Jan-11 20:35pm

1 solution

Rate this: bad
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:[^].
Also, Google:
marshall callbacks and delegates "C#"
— a lot of quite relevant matter.
Please comment on your progress.
Thank you,
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!
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.

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

Advertise | Privacy | Mobile
Web04 | 2.8.141022.2 | 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