• 0

Bluetooth Programming [C]


Question

#include <stdlib.h>
#include <stdio.h>
#include <Winsock2.h>
#include <Ws2bth.h>
#include <BluetoothAPIs.h>
#include <windows.h>

void ErrorExit(LPTSTR lpszFunction);

int main(void)
{
	BLUETOOTH_FIND_RADIO_PARAMS FirstRadio;
	HANDLE RadioHandle;
	HANDLE NextRadio;
	BOOL FoundNextRadioHandle;
	BLUETOOTH_RADIO_INFO RadioDeviceInfo;
	DWORD dw;

	BluetoothFindFirstRadio((BLUETOOTH_FIND_RADIO_PARAMS*)&FirstRadio,(HANDLE*)&RadioHandle);
	if(RadioHandle == NULL)
	{
  printf("Problems Creating Radio Handle");
	}

	FoundNextRadioHandle = BluetoothFindNextRadio((HANDLE*)&RadioHandle,(HANDLE*)&NextRadio);

	if(FoundNextRadioHandle == TRUE)
	{
  printf("Found Another Bluetooth Radio");
	}
	else
	{
  printf("Only One Bluetooth Radio Handle Present\n");
  
	}
  
	BluetoothGetRadioInfo(RadioHandle,(BLUETOOTH_RADIO_INFO*)&RadioDeviceInfo);
	dw = GetLastError();
	ErrorExit((LPTSTR)&dw);

	HBLUETOOTH_DEVICE_FIND DeviceHandle;
	BLUETOOTH_DEVICE_INFO DeviceInfo;
	BLUETOOTH_DEVICE_SEARCH_PARAMS SearchParams;

	BOOL FoundDevice; /*Return Value of FindNextDevice*/
	BLUETOOTH_DEVICE_INFO FoundDeviceInfo; /*Structure Containing Info of next Device*/

	SearchParams.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS);
	SearchParams.fReturnAuthenticated = TRUE;
	SearchParams.fReturnRemembered = TRUE;
	SearchParams.fReturnUnknown = TRUE;
	SearchParams.fReturnConnected = TRUE;
	SearchParams.fIssueInquiry = TRUE;
	SearchParams.cTimeoutMultiplier = 10;
	SearchParams.hRadio = RadioHandle;

	BluetoothFindFirstDevice((BLUETOOTH_DEVICE_SEARCH_PARAMS*)&SearchParams,(BLUETOOTH_DEVICE_INFO*)&DeviceInfo);
	dw = GetLastError();
	ErrorExit((LPTSTR)&dw);

	FoundDevice = BluetoothFindNextDevice((HBLUETOOTH_DEVICE_FIND*)&DeviceHandle,(BLUETOOTH_DEVICE_INFO*) &FoundDeviceInfo);
	dw = GetLastError();
	ErrorExit((LPTSTR)&dw);

	return 0;
}

void ErrorExit(LPTSTR lpszFunction) 
{ 
    TCHAR szBuf[80]; 
    LPVOID lpMsgBuf;
    DWORD dw = GetLastError(); 

    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        dw,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0, NULL );

    wsprintf(szBuf, 
        "%s failed with error %d: %s", 
        lpszFunction, dw, lpMsgBuf); 

    MessageBox(NULL, szBuf, "Error", MB_OK); 

    LocalFree(lpMsgBuf);
    ExitProcess(dw); 
}

Hi, Please could someone tell me why this program isnt working. It keeps comming up with the error :

  Quote
Error 126 : The specified module could not be found.

It needs the platform SDK installed for the bluetooth headers and such. It also doesnt find the local bluetooth dongle or my phone which is what it is intended to do.

Thanks in Advance.

Sawyer12 :)

Link to comment
https://www.neowin.net/forum/topic/275426-bluetooth-programming-c/
Share on other sites

13 answers to this question

Recommended Posts

  • 0

If a function succeeds, it is not required to set the last error to 0. You have to check what success means for each function. For example, BluetoothFindFirstDevice is supposed to return a valid handle and fails on NULL - you should check this first. If you have a NULL handle, then call GetLastError.

  • 0
  Sawyer12 said:
Can anyone tell me the difference between the functions :

BluetoothFindFirstDevice and  BluetoothFindFirstRadio ?

Which should I call first, Im basically trying to get my program to find my bluetooth phone. Any ideas?

585348297[/snapback]

I tried the code on 2 dev machines:

Machine 1: Mitsumi Bluetooth Adapter - Got an Error 126

Machine 2: Microsoft Bluetooth Keyboard/Mouse Adapter - Worked no problem

I guess it could be a driver issue.

BluetoothFindfirstDevice, this would find a device like phone, pda, keyboard etc.

BluetoothFindFirstRadio, this would find the actual bluetooth adapter.

  • 0

If you only have the 1 bluetooth adapter installed then you can have the line

 SearchParams.hRadio = NULL;

Then you can delete all the code that deals with BluetoothFindFirstRadio().

But like I said, 1 adapter worked for me, the other didn't... If you are still getting the same error it might be the adapter/api conflict.

  • 0

Here is the code that worked for me

#include "bthdef.h"
#include "BluetoothAPIs.h"
#pragma comment(lib, "irprops.lib")

	BLUETOOTH_DEVICE_SEARCH_PARAMS bdsp;
	BLUETOOTH_DEVICE_INFO bdi;
	HBLUETOOTH_DEVICE_FIND hbf;

	ZeroMemory(&bdsp, sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS));

	bdsp.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS);
	bdsp.fReturnAuthenticated = TRUE;
	bdsp.fReturnRemembered = TRUE;
	bdsp.fReturnUnknown = TRUE;
	bdsp.fReturnConnected = TRUE;
	bdsp.fIssueInquiry = TRUE;
	bdsp.cTimeoutMultiplier = 10;
	bdsp.hRadio = NULL;

	bdi.dwSize = sizeof(bdi);

	hbf = BluetoothFindFirstDevice(&bdsp, &bdi);
	DWORD dwErr = GetLastError();

	if (hbf != NULL)
	{
  TCHAR szDevName[MAX_PATH];

  while(1)
  {
  	memset(szDevName, 0x00, sizeof(szDevName));
  	sprintf(szDevName, _T("Name:%S"), bdi.szName);
  	MessageBox(szDevName, _T("Bluetooth Info"));

  	if (BluetoothFindNextDevice(hbf, &bdi) == FALSE)
    break;
  }

  BluetoothFindDeviceClose(hbf);
	}
	else
	{
  //No Devices Found...
	}

  • 0

I think that the Microsoft Bluetoothxxx() API functions are only to enumerate, bond, select & get info of bluetooth devices in the area. You may have to use the Winsock functions to actually communicate to the bluetooth device.

I only do WindowsCE programming, and the MS Bluetooth API functions are very different, eg. once you have bonded/selected a device it usually appears as a COM Port, then it is a simple matter of opening/closing/read/write to that port. On WIn32, I don't know.

Some devices like PDA's use OBEX to transfer files, maybe that could be used, maybe not !!!

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • hey guys its not counterfeit. i did test its ok needs formatting but how do i do that i need to go in dos and disk Disk Management anyone know step by step please 
    • The first link on the github page gives me a very, very red page warning me about phishing........
    • Hey Nick! 👋 No worries at all — you're not alone in this, and it's great you're asking for help. Let me walk you through a simple, step-by-step fix using the tool mentioned on that AOMEI Partition Assistant guide — it really does the trick for many people with this exact issue! ✅ Here’s how to restore your USB back to full 256GB on Windows 11: Download & Install AOMEI Partition Assistant Go to the link you shared: AOMEI Partition Assistant and click the Download Freeware button. Insert your USB stick (Sandisk Ultra 256GB) Make sure it's properly connected. Wait for the system to detect it. Launch AOMEI Partition Assistant Once open, you'll see all your connected drives listed. Locate your USB Drive Look for the one that says something like Disk X – Removable and shows only 3.1GB or so. Right-click on your USB Drive’s Partition Then select Delete Partition → confirm the deletion. Now, right-click on the unallocated space (it should now show full unallocated capacity) Choose Create Partition → format it as FAT32 or exFAT (recommended for larger drives) → click OK. Click “Apply” in the top left corner Then hit Proceed to execute the pending operations. Wait a bit... and boom! 🎉 Your USB should now be restored to its full 256GB capacity!
    • When Facebook bought Beat Saber, they promised exactly this would never happen. Facebook can’t not lie.
  • Recent Achievements

    • First Post
      Fuzz_c earned a badge
      First Post
    • First Post
      TIGOSS earned a badge
      First Post
    • Week One Done
      slackerzz earned a badge
      Week One Done
    • Week One Done
      vivetool earned a badge
      Week One Done
    • Reacting Well
      pnajbar earned a badge
      Reacting Well
  • Popular Contributors

    1. 1
      +primortal
      713
    2. 2
      ATLien_0
      279
    3. 3
      Michael Scrip
      209
    4. 4
      +FloatingFatMan
      201
    5. 5
      Steven P.
      131
  • Tell a friend

    Love Neowin? Tell a friend!