我试图从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。 我不知道这一切是如何运作的,所以希望有一些我需要做的事情。