使用 CoCreateInstance 从C++调用 C# dll

本文关键字:dll 调用 C++ CoCreateInstance 使用 | 更新日期: 2023-09-27 18:20:01

My ProjectA 一个C#类库,只有一个类:

  namespace myLib
  {
    // Interface declaration.
    [Guid("Some GUID")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface ICsClass
    {
        [DispId(1)]
        int Add(int Number1, int Number2);
    };
    [Guid("Some GUID")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("myLib.CsClas")]       
    public class CsClas : ICsClass
    {
         public int Add(int a, int b)
        {
            return a + b;
        }
    }
}

我已经使用VS2010检查了Register for com interop,它为我生成了dlltlb文件,到目前为止还好。

我的项目B是一个具有单个cpp文件的Win32 Dll应用程序:

    #import "MyLib.tlb" raw_interfaces_only
    using namespace MyLib;
......

.........

#ifdef __cplusplus
extern "C"{
#endif
    __declspec(dllexport) long Add(int a,int b)
    {
        CoInitialize(NULL); 
        long lResult = 0;       
        // Use Smart pointer
        CComQIPtr <ICsClass> spCoClass;
        if (SUCCEEDED (spCoClass.CoCreateInstance(L"myLib.CsClas")))
        {
            spCoClass->Add(a,b,&lResult);   
            wprintf(L"The result is %d'n", lResult);
            std::cout << "#"+lResult << ''n'; 
        }
        CoUninitialize();
        return lResult;
    }
#ifdef __cplusplus
}
#endif

.......

我能够编译这个 Dll,直到现在一切看起来都很好。

当我使用我的Win32 Dll并尝试调用Add函数时出现问题这一行:

 SUCCEEDED (spCoClass.CoCreateInstance(L"myLib.CsClas"))

永远不会通过,可能有什么问题,它没有正确注册吗?

请协助。

使用 CoCreateInstance 从C++调用 C# dll

编写的代码没有提供诊断故障的好方法。 改为这样写:

    HRESULT hr = spCoClass.CoCreateInstance(L"myLib.CsClas");
    if (SUCCEEDED(hr)) {
       // etc..
    }

一个常见的错误代码0x80040154"类未注册"。 诸如此类。