Знаю, что популярная проблема. Но нужно срочно, а я вообще не бум-бум.
Нужно подключить вот эту функцию:
DLL_EXPORT int __stdcall EvalCRC(IStream* Data, IStream* Params, IStream* Output)
{
if (!Data) return ERROR_NULL_DATA;
// Data - это входной поток с прошивкой, контрольку в которой нужно пересчитать
// Params и Output пока не используются и зарезервированы на будущее
int Result = PLUGIN_SUCCESS; // По-умолчанию возвращаем результат успешного выполнения
ULARGE_INTEGER size_;
LARGE_INTEGER larg_;
//ENCODE_START
larg_.QuadPart = 0;
Data->Seek(larg_, STREAM_SEEK_END, &size_);
// Считаем КС прошивки
if (size_.QuadPart == VALIDFWSIZE1 || size_.QuadPart == VALIDFWSIZE2)
{
try
{
char arr[IDLEN+1];
ULONG ulong;
unsigned int caloffset;
switch(size_.QuadPart)
{
case VALIDFWSIZE1:
{
// Калибровки
larg_.QuadPart = CAL_POS1;
Data->Seek(larg_ ,STREAM_SEEK_SET, &size_);
Data->Read(&arr, sizeof(arr), &ulong); // Вычитываем идентификатор
arr[IDLEN]=0x00;
if (CheckNumber(arr)) caloffset=CAL_POS1;
else return ERROR_SIGNATURE;
}
break;
case VALIDFWSIZE2:
{
// Фулл
larg_.QuadPart = CAL_POS2;
Data->Seek(larg_ ,STREAM_SEEK_SET, &size_);
Data->Read(&arr, sizeof(arr), &ulong); // Вычитываем идентификатор
arr[IDLEN]=0x00;
if (CheckNumber(arr)) caloffset=CAL_POS2;
else
{
larg_.QuadPart = CAL_POS3;
Data->Seek(larg_ ,STREAM_SEEK_SET, &size_);
Data->Read(&arr, sizeof(arr), &ulong); // Вычитываем идентификатор
arr[IDLEN]=0x00;
if (CheckNumber(arr)) caloffset=CAL_POS3;
else return ERROR_SIGNATURE;
}
}
break;
}
larg_.QuadPart = caloffset;
Data->Seek(larg_ ,STREAM_SEEK_SET, &size_);
WORD wval=0;
for(unsigned int i=0;i<(cRangeSize/2)-1;i++)
{
WORD wword;
Data->Read(&wword, sizeof(WORD), &ulong);
wword = (wword >> 8) | (wword << 8); // Переворачиваем
if (i!=cCSPos/2) wval += wword; // Считаем все, кроме контрольных сумм
}
wval=0-wval;
larg_.QuadPart = caloffset+cCSPos;
Data->Seek(larg_ ,STREAM_SEEK_SET, &size_);
wval = (wval >> 8) | (wval << 8); // Переворачиваем
Data->Write(&wval, sizeof(WORD), &ulong);
}
catch(...)
{
Result = ERROR_EXCEPTION;
}
}
else Result = ERROR_INVALID_SIZE;
return Result;
}
Пробовал по всякому, то типы данных не совпадают, то просто какие-то вылеты без ошибок и результатов. Если это не сложно, подскажите, как должна выглядеть строка подключения?
Подключить то, допустим, можно так (предполагая, что используется интерфейс IStream из COM Structured Storage):
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
[DllImport("mylib.Dll")]
static extern int EvalCRC(
IStream data,
IStream parms,
IStream output
);
Только обычные потоки System.IO.Stream не реализуют COM-интерфейс IStream, чтобы с ними работать придется реализовать какую-то свою обертку. Можно позаимствовать из исходников .NET
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть метод контроллера сервера Refresh(DateTime? Date) Есть метод jQuery который отправляет ajax-запрос по URL наподобие http://localhost:1234/Home/Refresh?Date=2304
Подскажите пожалуйста, как (c# winforms vs2010) обратиться (чтобы выгрузить в word) к привязанным данным "Value_1 и Value_2"? Те
Пытаюсь запустить простейший код консольного приложения:
У меня есть несколько уровней, между которыми есть сцена, которая отвечает за переход на следующий уровень, можно ли сделать так, чтобы за это...