在C ++中使用C#代码

时间:2016-01-07 06:12:39

标签: c# c++ com

在我的一个应用程序中,我在我的C ++代码中调用C#方法。我使用了文档表单MSDN: How to call a managed DLL from native Visual C++ code in Visual Studio.NET or in Visual Studio 2005。我成功地完成了这项工作。它在我的机器上正常工作。但是当我在另一台机器上部署相同的C ++代码以与C#中创建的.tlb文件一起进行测试时,我的代码在“//创建接口指针”的步骤中失败并出现未处理的异常.ICalculatorPtr pICalc(__ uuidof(ManagedClass)) ;”。请同样的建议。谢谢。

2 个答案:

答案 0 :(得分:1)

从您发布的链接How to call a managed DLL from native Visual C++ code in Visual Studio.NET or in Visual Studio 2005确保您按照下面复制的步骤进行操作,并确保其完成且没有错误。请注意,部署/复制TLB文件不够,您必须将其与目标计算机上的程序集一起注册。

  

注册托管DLL以与COM或Native C ++一起使用

     

要将托管DLL与COM或本机C ++一起使用,必须在Windows注册表中注册DLL的程序集信息。

     

为此,请按照下列步骤操作:   
...
  5.要在Windows注册表中注册托管DLL的程序集信息并创建相应的类型库,请在Visual Studio .NET命令提示符处运行以下命令:

RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb /codebase

答案 1 :(得分:-1)

我发现下面的代码正常工作。

    SHELLEXECUTEINFO shExecInfo;

    shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    shExecInfo.fMask = NULL;
    shExecInfo.hwnd = NULL;
    shExecInfo.lpVerb = L"runas";
    shExecInfo.lpFile = L"C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\RegAsm.exe";
    shExecInfo.lpParameters = L"C:\\Test\\WebServices.dll /tlb:C:\\Test\\WebServices.tlb /codebase";
    shExecInfo.lpDirectory = NULL;
    shExecInfo.nShow = SW_NORMAL;
    shExecInfo.hInstApp = NULL;

    ShellExecuteEx(&shExecInfo);

使用C ++函数中的上述代码自动注册托管dll。 温和的建议,人们来到这里寻求专家的帮助,因为人们感到困惑,不知道正确的道路。在这种情况下降低评级或分数并不是一项体面的工作。谢谢大家。