用std::vector从dll调用其他dll的C++
C++ call from dll other dll with std::vector
我有一个带有外部方法的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 libraryn");
}
// Get the function pointer
runScript = (RUNSCRIPT_FUNCTION)GetProcAddress(dll, "getAlgorithmInstance");
if (runScript == NULL)
{
FreeLibrary(dll);
printf("Unable to load functionn");
}
// 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和垃圾。
编辑基本_现金类
extern "C" class basic_hash
{
public:
virtual ~basic_hash() {}
virtual void reset() = 0;
virtual void hash(const byte*, uint64, vector_byte&) = 0;
};
一些可能性:
-
DLL是针对不同版本的c++运行库编译的
-
DLL已针对c++运行库静态链接
-
您的应用程序已针对c++运行库进行静态链接
-
DLL中有一个错误。
注意。在DLL的接口中提供c++标准库类型通常是一个非常严重的错误。
当标准库发生变化时(例如,编译器升级),您可能需要重新编译库和所有使用它的应用程序……这首先违背了使用共享库的目标。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL