Click here to Skip to main content
13,050,450 members (81,135 online)
Rate this:
Please Sign up or sign in to vote.
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?
Posted 24-Jan-11 18:09pm
Updated 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 25-Jan-11 5:15am
Thanks for ur guide SA... Now can hit the callback function..:-)
SAKryukov 25-Jan-11 13:48pm
I'm happy it worked.
Good luck!
Espen Harlinn 6-Feb-11 14:40pm
Good answer, as usual :)
SAKryukov 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)

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy | Mobile
Web02 | 2.8.170713.1 | Last Updated 25 Jan 2011
Copyright © CodeProject, 1999-2017
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