Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建一个C++;DLL从C#DLL调用方法_C++_C++ Cli - Fatal编程技术网

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

C++ 创建一个C++;DLL从C#DLL调用方法,c++,c++-cli,C++,C++ Cli,我已经尝试使用COM来执行此操作,但每次我都允许此行运行: ICalculatorPtr pICalc(__uuidof(ManagedClass)); 这行打断了我调用它的C++函数。 我知道它是为C++客户端控制台应用程序而做的,但是COM方法不应该为C++ DLL工作吗?p> FYI,C++ DLL在运行时导入到另一个程序中。(主要应用程序的设计) 是在我的Visual Studio解决方案中生成三个项目的唯一方法:C#.net DLL,C++/CLI managed.DLL,然后是C

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

ICalculatorPtr pICalc(__uuidof(ManagedClass));

这行打断了我调用它的C++函数。 我知道它是为C++客户端控制台应用程序而做的,但是COM方法不应该为C++ DLL工作吗?p>

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

是在我的Visual Studio解决方案中生成三个项目的唯一方法:
C#.net DLL
C++/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();

    }
试试看{
ICalculatorPtr myvalue(uu uuidof(ManagedClass));
}
捕获(_com_error&e)
{
//裂纹(com)错误
_bstr_t bstrSource(例如Source());
_bstr_t bstrDescription(如Description());
std::ofstreamout(“C:\\Samples\\output.txt”);

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

DLL的代码加载到可执行文件中,然后像直接编译成一样执行。所以COM应该可以工作从DLL也一样,我假设你在其他地方做了错误的事情……另一方面,我认为COM是一个可怕的接口,C++中的C++CLI方法总是以最小阻力的方式出现……你的代码有一个错误。为了帮助你修复它,我们需要看到代码。它没有有用的错误处理。这确实会让你的程序在无法找出原因的情况下失败。它需要try/catch来捕获
\u com\u错误
异常。只有当你有了它,你/我们才能在找出错误的方面取得进展。谷歌“如何捕获一个\u com\u错误异常”对于有用的点击。我是stackoverflow新手。我可以将我的Visual Studio解决方案作为zip文件上载吗?错误处理很差,因为我必须在项目属性中切换它们。一旦我按照MS文章的说明启用/clr公共语言运行库,它就会对不同的标志(如/Zi或/RCHP(*sp))感到不安所以我只是继续向前去移除项目属性中的生成错误。项目将建立但不工作。我有一个与C++控制台应用程序完全相同的项目,使调用和调用C++的DLL方法工作得很好,第二次尝试添加相同的方法到C++ DLL,然后加载我的DLL I。在客户端应用程序中,它会中断。