创建一个C ++ DLL以从C#DLL调用方法

时间:2018-07-27 09:01:12

标签: c++ c++-cli

我已经尝试使用 COM 来执行此操作,但是每次,我都允许运行此行:

ICalculatorPtr pICalc(__uuidof(ManagedClass));

此行中断了我的C ++函数调用它。 我知道Microsoft Article是为C ++客户端控制台应用程序制作的,但是 COM 方法不应该为C ++ DLL 工作吗?

仅供参考,C ++ DLL 正在在运行时导入到另一个程序中。 (主要应用程序的设计)。

是在我的 Visual Studio解决方案中制作三个项目的唯一方法:C#.net DLLC++/CLI managed.DLL,然后是C++ Native.DLL

我在com错误中添加了一个问题:

try {
        ICalculatorPtr myvalue(__uuidof(ManagedClass));
    }
    catch (_com_error &e)
    {
        // Crack _com_error
        _bstr_t bstrSource(e.Source());
        _bstr_t bstrDescription(e.Description());

        std::ofstream out("C:\\Samples\\output.txt");

        out << "Error 1: " << e.Error() << "\n" ;
        out << "Error 2: " << e.ErrorMessage() << "\n";
        out << "Error 3: " << (LPCTSTR)bstrSource << "\n";
        out << "Error 4: " << (LPCTSTR)bstrDescription << "\n";

        out.close();

    }

输出为

错误1:-2147221164 错误2:00000272EED86F40 错误3:0000000000000000 错误4:0000000000000000

此代码未注册。

我确实在注册表中注册了C#.dll。 RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb / codebase

该代码均适用于C ++控制台应用程序,但不适用于将C ++ DLL加载到客户端应用程序中的情况。

1 个答案:

答案 0 :(得分:0)

我发现了这个问题,我没有在RegAsm.exe cmd中正确注册DLL。一旦成功,COM将可以正常工作。我想我使用的是32位而不是64位的Visual Studio CMD线条工具。