为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 c++/cli 包装器从 c# dll 加载函数

无法使用 c++/cli 包装器从 c# dll 加载函数

C#
PIPIONE 2021-10-09 16:41:36
这是我第一次从 c# dll 调用函数。我已经制作了 ac# wrapper(c++/cli) 来从 c++ 调用 c# 函数。这个包装器本身是一个 dll,我想在我的主代码中使用它。下面是 wrapper.h 和 wrapper.cpp 文件。CSharpWrapper 是继承基类 ImageTool 的抽象类。在头文件的末尾,我正在导出包装类的工厂。包装器.h#define Export_Wrapper#ifdef Export_Wrapper#define _DLLExport __declspec(dllexport)#else#define _DLLImport __declspec(dllimport)#endif // Export_Wrapperclass CSharpWrapperPrivate;class _DLLExport CSharpWrapper : public ImageTool{public:    CSharpWrapper();    ~CSharpWrapper();    int Initialize();    int Deinitialize();    cv::Mat AcquireImg(double positionX, double positionY);private:    CSharpWrapperPrivate* _private;};extern "C" __declspec(dllexport) ImageTool* __cdecl createFactory(){    return new CSharpWrapper;}包装器.cppclass CSharpWrapperPrivate{public:    msclr::auto_gcroot<ImageDistiller^> ImageAPI;};CSharpWrapper::CSharpWrapper(){}CSharpWrapper::~CSharpWrapper(){    delete _private;}int CSharpWrapper::Initialize(){    _private = new CSharpWrapperPrivate();    _private->ImageAPI = gcnew ImageDistiller();    return _private->ImageAPI->Initialize();}int CSharpWrapper::Deinitialize(){    return _private->ImageAPI->Deinitialize();}cv::Mat CSharpWrapper::AcquireImg(double positionX, double positionY){    Mat img = _private->ImageAPI->AcquireImg(positionX, positionY);}/**/在 wrapper.cpp 文件中,visual studio 能够建议 c# dll 中可用的函数。以下是我试图通过此包装器调用函数的 main.cpp 代码。主程序typedef ImageTool*(__cdecl *ImgFactory)();ImageTool* instance_imgcapture;HINSTANCE dll_imgcapture_handle;现在,当我运行 main.cpp 时,它能够创建 dll_imgcapture_handle 和 ImgFactory。但是在调用 instance_imgcapture->Initialize() 时会出现以下错误:在 wrapper.exe 中 0x00007FFD20B5A388 (KernelBase.dll) 处未处理的异常:0xE0434352(参数:0xFFFFFFFF80070002, 0x0000000000000000, 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000我尝试了这种方法来加载 dll(如在 main.cpp 中)与其他 c++ dll - 它有效。我尝试使用dependency_walker检查是否有任何丢失的dll - 没有。我已经包含了正确的 opencv 库并且它们可以正常工作。我已经在项目属性中包含了 dll 和库的路径,并在链接器->输入中添加了库名称。你能帮我调试这个问题吗?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信