"BLE Communication in React Native Windows: Issues with Native C++ Module" #14360
mayuripore973
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
I am developing a React Native Windows application with BLE communication using a custom C++ native module. However, I am encountering build errors and issues with module registration.
Environment Details :
React Native Version: 0.75.5
React Native Windows Version: 0.75.13
C++ Compiler: MSVC (VS 2022)
OS: Windows 10
Bluetooth Library Used: (Windows.Devices.Bluetooth API)
I Implemented a BleModule in C++ as a native module.
Registered the module using REACT_MODULE(BleModule).
Attempted to include the module in ReactPackageProvider.cpp.
Ensured the necessary dependencies were installed.
// BleModule.h
#pragma once
#include "NativeModules.h"
#include <winrt/Windows.Devices.Bluetooth.h>
#include <winrt/Windows.Devices.Bluetooth.GenericAttributeProfile.h>
#include <winrt/Windows.Devices.Enumeration.h>
namespace winrt::SampleApp::implementation {
// Declare the module to React Native
REACT_MODULE(BleModule)
struct BleModule {
// Default constructor (needed for React Native Windows)
BleModule() = default;
private:
winrt::Microsoft::ReactNative::IReactContext m_reactContext{ nullptr };
};
}
// BleModule.cpp
#include "pch.h"
#include "BleModule.h"
using namespace winrt;
using namespace Windows::Devices::Enumeration;
using namespace Windows::Devices::Bluetooth;
namespace winrt::SampleApp::implementation {
// Default constructor (needed for React Native Windows)
BleModule::BleModule() {}
// Constructor to store React context
BleModule::BleModule(winrt::Microsoft::ReactNative::IReactContext const& reactContext)
: m_reactContext(reactContext) {}
void BleModule::StartScan() {
DeviceWatcher watcher = DeviceInformation::CreateWatcher(
BluetoothLEDevice::GetDeviceSelector());
}
void BleModule::ConnectToDevice(std::string deviceId) {
auto asyncOp = BluetoothLEDevice::FromIdAsync(winrt::to_hstring(deviceId));
asyncOp.Completed([this](auto const& asyncInfo, auto const& status) {
if (status == Windows::Foundation::AsyncStatus::Completed) {
auto device = asyncInfo.GetResults();
if (device && m_reactContext) {
m_reactContext.CallJSFunction(
L"RCTDeviceEventEmitter", L"emit", L"onDeviceConnected", device.Name().c_str());
}
}
});
}
}
// ReactPackageProvider.cpp
#include "pch.h"
#include "ReactPackageProvider.h"
#include "NativeModules.h"
#include "BleModule.h" // Ensure this is included
using namespace winrt::Microsoft::ReactNative;
namespace winrt::SampleApp::implementation
{
void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept
{
AddAttributedModules(packageBuilder, true);
packageBuilder.AddModule<L"BleModule">();
}
}
Errors :
Build failed with message C:\React-Native Projects\sample_app\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\NativeModules.h(984,54): error C2027: use of undefined type 'winrt::Microsoft::ReactNative::ModuleMethodInfo' [C:\React-Native Projects\sample_app\windows\SampleApp\SampleApp.vcxproj]. Check your build configuration.
Command failed. Re-run the command with --logging for more information.
Expected Outcome :
I expect my C++ BleModule to be recognized and registered properly in React Native Windows, allowing JavaScript to call its methods.
Can we add classes in C# instead of C++ in windows project and register C# classes ?
Do I need additional steps to expose the module correctly?
Is there a specific way to debug module loading in React Native Windows?
Any references or working examples would be helpful.
Beta Was this translation helpful? Give feedback.
All reactions