c# - 如何从 Visual Studio.NET 或 Visual Studio 2005 中的 native Visual C++ 代码调用托管 DLL

标签 c#

我用过这个网站https://support.microsoft.com/en-in/help/828736/how-to-call-a-managed-dll-from-native-visual-c-code-in-visual-studio-n

问题-

我已经创建了 MyInterop.tlb 文件并包含在项目中。 当我在不同的机器上安装设置时,我已经创建了窗口安装程序

 CoInitialize(NULL); 
IWindowPtr pDotNetCOMPtr;

HRESULT hRes = 
    pDotNetCOMPtr.CreateInstance(__uuidof(WindowClass));

flag=pDotNetCOMPtr->show ();

CoUninitialize();

发生类未注册问题

最佳答案

需要注册 Com 对象。您可以通过选中 Visual Studio 项目中的“注册 COM 互操作”来执行此操作,如图所示,或者您必须在安装程序运行中注册它。确保你有像你发送的示例链接一样的标题

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

COM 对象也应该有一个 GUID。这允许注册表正确处理它。

在之前的工作中,这些是我包含的标题。每个正在注册的对象的每个 Guid 都是不同的。:

   [ComVisible(true)]
   [ClassInterface(ClassInterfaceType.None)]
   [Guid("7F2DA4BD-12BF-4EE7-80E7-F85D1F15926C")]

Register For COM Interop

关于c# - 如何从 Visual Studio.NET 或 Visual Studio 2005 中的 native Visual C++ 代码调用托管 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46690344/

相关文章:

c# - Unity - 从阵列中获取随机天空盒

c# - 无法通过 smtp 服务器发送邮件,因为出现 'operation timeout' 错误

c# - 测试一个值是否包含在 Dictionary<TKey, List<TValue>> 中

C# Web 请求-HTTP : 403 Forbidden ('_xsrf' argument missing from POST)

c# - 在 Windows 中对 'live' 文件使用 grep

c# - LINQ group by 表达式语法

c# - 防止更改 String.Empty 的值

c# - 在事件分派(dispatch)之前检查 null ...线程安全吗?

c# - ContactPicker 在 Windows Phone 8.1 Silverlight 中不工作

c# - 使用 ObservableCollection 进行 LINQ