如何从c+使用c#dll中定义的类+;代码

如何从c+使用c#dll中定义的类+;代码,c#,c++,dll,C#,C++,Dll,我有一个用c#编写的dll,我在c++代码中使用了这个dll(完全是MFC)。我可以使用dll函数返回值int,string。。。但是我需要使用一个返回值为c#class的函数!我不知道在MFC中输入函数返回值的数据类型是什么c#返回值对象在MFC中转换为\u variant\t。请帮帮我。谢谢你阅读我的问题 C#代码(摘要) [Guid(“-”)] 公共接口ITestClass { 对象Func(); } [Guid(“-”)] 公共类TestClass:ITestClass { 公共对象Fu

我有一个用c#编写的dll,我在c++代码中使用了这个dll(完全是MFC)。我可以使用dll函数返回值int,string。。。但是我需要使用一个返回值为c#class的函数!我不知道在
MFC
中输入函数返回值的数据类型是什么c#返回值对象在
MFC
中转换为
\u variant\t
。请帮帮我。谢谢你阅读我的问题

C#代码(摘要)

[Guid(“-”)]
公共接口ITestClass
{
对象Func();
}
[Guid(“-”)]
公共类TestClass:ITestClass
{
公共对象Func()
{
Project1.Class1数据=数据列表[0];
返回数据;
}
}
MFC代码(摘要)

ITestClass*ptc=NULL;
共初始化(空);
HRESULT hr=CoCreateInstance(CLSID_TestClass,NULL,CLSCTX_INPROC_SERVER,IID_ITestClass,reinterpret_cast(&ptc));
int sum=ptc->sum(5,30);//它是完美的
data=ptc->Func();//我不知道数据类型是什么

> p>您必须在C++中定义相同的类。这有点难,而且可能有马车。所以我会尝试使用CLI

或者有一个更简单的方法。不要那样做:) 例外,使用旧的、好的机制,如:

int objectHandle = ptc->CreateObject();
int data = ptc->GetSomeIntData(objectHandle);
ptc->DoSomeOperation(objectHandle);
ptc->ReleaseObject(objectHandle);
这个想法是你在C++方面没有一个类。对象是在C#端创建的,并具有其唯一的对象句柄(可能是哈希代码)。在CreateObject中返回此句柄,在C#端,可以将对象存储在字典中:

Dictionary<int, MyClass>
接下来,您可以这样使用它:

CoInitialize(NULL);
ClassNamespace::ITestClassPtr myClass(__uuidof(ClassNamespace::TestClass));
myClass->Func();
CoUninitialize();

也可以在C++类中包装所有的功能。这当然会产生更多的工作,并使您必须保留两个类似的代码(real类和wrapper类)。但使用起来可能更友好

如果要返回其他类,则必须以类似的方式进行。创建COM接口,在C++中使用它并返回到C中。
#import "path\to\lib.tlb"
CoInitialize(NULL);
ClassNamespace::ITestClassPtr myClass(__uuidof(ClassNamespace::TestClass));
myClass->Func();
CoUninitialize();