У меня есть следующий код:
[DllImport("ftcjtag.dll", CallingConvention = CallingConvention.Cdecl)]
static extern uint JTAG_OpenHiSpeedDevice(string DeviceName, uint locationID, string channel, ref IntPtr pftHandle);
[DllImport("ftcjtag.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern uint JTAG_InitDevice(IntPtr ftHandle, uint clockDivisor);
IntPtr ftHandle = IntPtr.Zero;
ftStatus = JTAG_OpenHiSpeedDevice(hiSpeedDeviceName, locationId, hiSpeedChannel, ref ftHandle);
if (ftStatus != FTC_SUCCESS)
{
throw new JTAGApiException("An error occurred while calling JTAG_OpenHiSpeedDevice for device:" + hiSpeedDeviceName + ". API Error:" + GetError(ftStatus));
}
ftStatus = JTAG_InitDevice(ftHandle, 1);
if (ftStatus != FTC_SUCCESS)
{
throw new Exception("An error occurred during init jtag device " + HiSpeedDevice.DeviceName);
}
Когда я запускаю его с Net 3.5, он работает нормально.
Когда я переключаюсь на 4.6.1, JTAG_InitDevice возвращает код ошибки, говорящий, что предоставленный дескриптор недействителен. JTAG_OpenHiSpeedDevice - то, где я получил ручку. Я не вижу причины, по которой в 3.5 дескриптор действителен, а в 4.6.1 он недействителен.
Thx