在 C++ 中使用 C# 代码
Posted
技术标签:
【中文标题】在 C++ 中使用 C# 代码【英文标题】:Using C# code in C++ 【发布时间】:2016-01-07 06:12:39 【问题描述】:在我的一个应用程序中,我在我的 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)) ;"。请同上指教。谢谢。
【问题讨论】:
您的目标机器上是否安装了所需的 .net 框架? 目标机有VS10。 我认为这行不通。您将需要用于编译 c# 代码的相同 .net 框架,而不是 Visual Studio。不需要视觉工作室 在我的机器上,我使用了相同的 VS2010 来编译 C# 代码。请指教。我需要注册 C# dll 吗? 【参考方案1】:从您发布的链接How to call a managed DLL from native Visual C++ code in Visual Studio.NET or in Visual Studio 2005 确保您按照下面复制的步骤操作,并且它已完成且没有错误。请注意,仅部署/复制 TLB 文件是不够的,您必须将其与程序集一起实际注册到目标机器上。
注册托管 DLL 以便与 COM 或本机 C++ 一起使用
要将托管 DLL 与 COM 或本机 C++ 一起使用,您必须在 Windows 注册表中注册 DLL 的程序集信息。
为此,请按以下步骤操作: ... 5.要在 Windows 注册表中注册托管 DLL 的程序集信息并创建相应的类型库,请在 Visual Studio .NET 命令提示符处运行以下命令:
RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb /codebase
【讨论】:
您好 dxiv,感谢您的回复。我已经注册了 dll,并且在我的机器中获得了 .tlb 文件。我也将相同的部署到目标机器上。请就任何进一步错过的步骤提出建议。谢谢。 @Bhavanideployed the same to the target machine
到底是什么意思?复制它们是不够的,这是重点。
你好 dxiv,我知道它不足以复制 .tlb 文件。我已经在我的机器中注册了托管 dll 并在 C++ 中使用。它工作正常。当我在另一台机器上使用 C++ dll 时,出现错误,显然是因为托管 dll 未在目标机器中注册。您能否建议一种通过代码或任何其他解决方案注册托管 dll 以使我的代码工作的方法在任何其他机器上。谢谢。
@Bhavani 正如 dxiv 所说,您必须在将其复制到的每台机器上运行 regasm,而不仅仅是您的开发机器。
你好米奇,谢谢你的评论。您能否指导我注册我的 dll 的程序(如果有)。由于在我要部署我的代码的所有机器上使用 RegAsm.exe 手动注册 dll 是不可能的,请给我一个建议。谢谢。【参考方案2】:
我发现下面的代码可以正常工作。
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。 温柔的建议,人们来这里寻求专家的帮助,因为人们很困惑,不知道正确的道路。在这种情况下降低评级或分数并不是一项体面的工作。谢谢大家。
【讨论】:
以上是关于在 C++ 中使用 C# 代码的主要内容,如果未能解决你的问题,请参考以下文章