В довольно сложном сценарии я получаю ожидание «место чтения нарушения доступа». Позволь мне объяснить. У меня есть код C, который связывает статическую библиотеку C ++ с помощью оболочки. Эта библиотека использует другую статическую библиотеку, которая связывает DLL. Чтобы было немного яснее, я постараюсь изобразить это:
Can.c —> звонки —> Wrapper.cpp (оболочка для библиотеки c ++)
Wrapper.cpp —> звонки —> Lib_For_Wrapping.lib (API для разных типов hw)
Lib_For_Wrapping.lib —> вызывает функции из —> EG_presos_PAL.dll (которая связана со статической библиотекой EG_presos_PAL.lib)
Теперь при вызове функции открытия драйвера и доступа к hw устройству. Я получаю вышеупомянутое исключение.
/* Open the driver, access the hardware device. */
palRet = PAL_Startup(
&m_palSession,
m_palHwType,
"0",
m_palTtcFile,
true,
true);
if(palRet) {
m_talSession = PAL_NO_SESSION;
m_currentStatus = Can::BUSSTATUS_DRIVERERROR;
CIFERROR("PAL_Startup() failed with error code: " << static_cast<int>(palRet));
return false;
} else {
++sm_numInstances;
}
Объявление для этой функции выглядит так:
PAL_Startup(PAL_SessionHandleType * pSessionHandle,
PAL_ConnectionType eConnectionType,
const char * sDeviceName,
const char * sTtcFile,
PAL_Boolean bWaitUntilReady,
PAL_Boolean bCleanStartup);
К сожалению, у меня нет доступа к реализации, но, насколько я знаю, я не пытаюсь разыменовать нулевые указатели. Вызов этой функции, насколько я вижу, так как реализация находится в DLL. Последняя запись стека вызовов — DeviceIoControl в KernelBase.dll.
Любые идеи были бы хорошы.
Задача ещё не решена.