Unsolved How to avoid repeated execution of loading Qlibrary?
-
I wanted to try the changes in debug mode but I immediately ran into the following error message :
Time for a cup of coffee...
-
@RogerBreton said in How to avoid repeated execution of loading Qlibrary?:
Time for a cup of coffee...
I would rather say - time for a debugging session :)
-
@RogerBreton
If, from what you have shown, you presently have:bool Result; Result = myLib.load(); RB_StartMeasurement = reinterpret_cast<Fn6>(myLib.resolve("FDX_StartMeasurement")); sdkError = RB_StartMeasurement();
without checking the intermediate return result variables,
RB_StartMeasurement
may benullptr
. ThenRB_StartMeasurement()
would cause aSIGSEGV
? -
@JonB I don't dare say RB_StartMeasurement may be a nullptr in ALL LIKELIHOOD, and that maybe the cause of the segmentation fault. That is exactly my hypothesis. So, if that is the case, this proves my intuition : where is the application getting the DLL from? If its name isn't specified anywhere? It is not in the PRO file.
I was thinking, perhaps, I should test whether the library is loaded before calling RB_StartMeasurement? And if it is not loaded, then load it? But that would not explain why I get the SIGSEV when the application tries to load? Or is it happening in the constructor?
Somehow, I must be missing some important piece of the puzzle -- I'll continue to look around but I am optimistic...
-
bool Result; Result = myLib.load(); if (!Result) qDebug() << "This is bad..."; RB_StartMeasurement = reinterpret_cast<Fn6>(myLib.resolve("FDX_StartMeasurement")); if (RB_StartMeasurement == nullptr) qDebug() << "This is bad. Get ready for SEGV if you call RB_StartMeasurement() now..."; sdkError = RB_StartMeasurement();
-
I declared the RB_StartMeasurement as NULL in mainwindow.h :
class MainWindow : public QMainWindow { Q_OBJECT QLibrary myLib; typedef DEVICE_ERROR_TYPES(__stdcall* Fn6)(void); Fn6 RB_StartMeasurement = NULL;
But I still get the Segmentation Fault...
-
Hi,
Did you implement @JonB´s suggestion ?
Start in debug and you should see exactly where it fails.
-
@SGaist That is exactly what I do :
I found the culprit...
DEVICE_ERROR_TYPES sdkError = RB_RegisterDeviceEventHandler(EventNotice);
The above function is a static member function declared in SomeClassName... which was working fine before ... The EventNotice function is also part of the same class.
-
For some reason (?), the EventNotice "address" is garbage :
EventNotice 2372415452829272149 void (DEVICE_eEventCode, uint32_km, DEVICE_ERROR_TYPES)
It should be a proper address like 0x00007ff739a21970.
I tried restarting QT Creator many times to no avail. -
Thank you all for your patient help.
I'm putting QT on the backburner for now.
Too bad. Such a nice environment.