У меня есть библиотеки DLL с внешним методомс ++ вызов из длл другой DLL с станд :: вектор
extern "C" HAL_HASH_API basic_hash* getAlgorithmInstance(int algorithm);
и basic_hash имеет следующий метод
// resets to the initial condition of the algorithm,
// reset the counter and the current values
virtual void reset() = 0;
// performs all encryption cycle.
virtual void hash(const byte*, uint64, vector_byte&) = 0;
Первый параметр <data>
является указателем к началу данных второй параметр <size>
указывает размер хэшированных данных, третий параметр <hash>
- это буфер для хранения хеш-значения. изменение размера вектора автоматически.
и у меня есть следующие типы
typedef unsigned char byte;
typedef unsigned long long uint64;
typedef std::vector<byte> vector_byte;
, когда я инициализации переменных и вызвать hash
RUNSCRIPT_FUNCTION runScript;
basic_hash* pointerBasicHash;
// Load the DLL
HINSTANCE dll = LoadLibrary(L"HAL.dll");
if (dll == NULL)
{
printf("Unable to load library\n");
}
// Get the function pointer
runScript = (RUNSCRIPT_FUNCTION)GetProcAddress(dll, "getAlgorithmInstance");
if (runScript == NULL)
{
FreeLibrary(dll);
printf("Unable to load function\n");
}
// Call the function
pointerBasicHash= (runScript)(0);
vector_byte hashresult;
hashresult.reserve(1024);
uint64 size = 8;
byte myString[] = "1234567";
const byte* buff = &myString[0];
pointerBasicHash->reset();
pointerBasicHash->hash(buff, size, hashresult);
переменная hashresult
неправильно, он содержит переменную PATH и мусор системы.
EDIT basic_hash это класс
extern "C" class basic_hash
{
public:
virtual ~basic_hash() {}
virtual void reset() = 0;
virtual void hash(const byte*, uint64, vector_byte&) = 0;
};
пожалуйста вывесить подпись pointerBasicHash :: хэш() –
жаль я изменить код pointerBasicHash это 'basic_hash * pointerBasicHash;' – 6azbljlb
Проверили вы 'hash' функцию класса' pointerBasicHash' вы получите? – grisumbras