在我的一个应用程序中,我在我的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)) ;”。请同样的建议。谢谢。
答案 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。 温和的建议,人们来到这里寻求专家的帮助,因为人们感到困惑,不知道正确的道路。在这种情况下降低评级或分数并不是一项体面的工作。谢谢大家。