使用tlb引用从C ++实例化C#中的对象无效

时间:2016-11-24 09:39:55

标签: c# c++ com

我试图从c ++程序中调用c#方法。

我设法通过关注这部电影得到了一个我希望从visual studio本地运行的实例(即使它是日语) https://www.youtube.com/watch?v=8h1upGiG4HQ

有了这个,我得到了以下c#类。

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Runtime.InteropServices;
  using System.Text;
  using System.Threading.Tasks;

 namespace test
{
[ComVisible(true)]
public interface IMyClass
{
    int GetData(String t);
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class MyClass : IMyClass
{
    public int GetData(String test)
    {          
            return 3;          
    }
}
}  

本地我可以用这个c ++程序调用这个类。

  #include "stdafx.h"
  #include <Windows.h>
  #import "C:\Debug\test.tlb" no_namespace


  int main(int argc, _TCHAR* argv[])
  {
    CoInitialize(NULL); 

    IMyClassPtr obj;
    obj.CreateInstance(__uuidof(MyClass));
    printf("data=%d\n", obj->GetData(" ")); 
    CoUninitialize();

     return 0;
 }

但是当我试图让它在一个更大的程序中工作时。 在这种情况下,我将一个示例凭据提供程序放入dll文件并放入system32目录中。 dll构建正常,凭证提供程序启动正常,但是当我创建obj时它是null。 Createinstance返回&#34;类未注册&#34;

凭据提供程序中的相关代码。

  #include <Windows.h>
  #import "C:\Debug\test.tlb" no_namespace

  .....

  CoInitialize(NULL);
  IMyClassPtr obj;
  obj.CreateInstance(__uuidof(MyClass));                            
  if (obj == NULL) {
    MessageBoxA(NULL, "NULL", "", MB_OK);
  }

如果我在登录时运行它,则返回null。 我不知道这一切是如何运作的,所以希望有一些我需要做的事情。

0 个答案:

没有答案
相关问题