Библиотека C ++, вызываемая из кода C: место чтения нарушения доступа (KernelBase.dll)

В довольно сложном сценарии я получаю ожидание «место чтения нарушения доступа». Позволь мне объяснить. У меня есть код 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.
Любые идеи были бы хорошы.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]