I have a problem with one of our devices, but only on Windows XP (yes, I'm aware that it's not supported by Microsoft anymore, but I'm hoping for some knowledge/interest anyway)

Currently using WCL 6.11.4.0 but updating to trial version of 6.14.1.0 didn't change a thing.

OnDiscoveryComplete returns a wclBluetoothDevice with name "COMPUTERNAME". As learned some days ago, I store device and radio of the wclBluetoothDiscoveryCompleteEventArgs by creating a new wclBluetoothDevice and wclBluetoothRadio and perform assign() on the e objects. Then I store those two variables in a struct as a member variable on my tab pages.

Some seconds later the radio is named "al Port". Do you have any hint, what I'm doing wrong?

wclBluetoothDevice and wclBluetoothRadio are absolutely different objects. wclBluetoothDevice represents a remote Bluetooth enabled device. wclBluetoothRadio represents a local Bluetooth Radio module. And of course they will have different names.

Also I do not recomend to store any wclBluetoothRadio information and use EnumRadios instead each time you need to find a local Radio (at least you can call EnumRadios when your application run first time then use this Radio in your work. However it can be changed since you remove/replug dongle so after that you have to re-enum radios).

For a remote device you need just store its MAC. Then you can read any other information about remote device using this MAC.

I made a mistake, rephrasing question, sorry: OnDiscoveryComplete returns a wclBluetoothRadio with name "COMPUTERNAME". As learned some days ago, I store device and radio of the wclBluetoothDiscoveryCompleteEventArgs by creating a new wclBluetoothDevice and wclBluetoothRadio and perform assign() on the e objects. Then I store those two variables in a struct as a member variable on my tab pages. Some seconds later the radio is named "al Port".

Scenario is as follows: I have a separate bluetooth manager process which communicates with the main application via a named pipe. Once I successfully connected to the bluetooth device, I store address and radio. When the device stops responding and in some other cases, I terminate that manager process. On startup of the process afterwards I don't want to scan for all devices again, that's why I load stored local radio and remote MAC address to reconnect. It works like a charm, except this one case in Windows Xp when the device is in "standby" and the radio name changes after saving it. With this I don't find my old radio anymore and the user has to search again.

client.connect() reports "internal driver afterwards, but usually I don't even get that far, because EnumRadios() doesn't contains the initial radio name while my stored value is the new one.

No. It does not look completly disposed but partialy. What I mean is that memory has been corrupted by some reason. As you can see "al Port" probably is "Local Port" - a part of other string. As .NEt is managed it probably trys to dispose the object but not completly. See what I mean? Try to change your code to do not store Local Radio information but call EnumRadios instead. It is fast operation and easy. Simple call EnumRadios and get first found.

If EnumRadios fails then it is something with your thread/communication code which corrupts memory.

When AddToListViewOnce is called for the second device found, the radio name gets "manipulated" between TextLogging points A and B. At logging point "A" it still is "COMPUTERNAME" and at logging point B it already is "al Port". Using .Assign() didn't help, neither did changing struct to class. Any clue?