C++ cli 是否可以导出C++;与MEF和Prism的CLI接口 我有一个C++库中定义的C++接口(用/CLR开关编译) 我还有一个C#library
我的C#库定义: -实现IModule接口的类。 -实现C++/CLI接口并用属性修饰的类 C#和C++\CLI库都部署在同一个文件夹中 我从Prism得到一个ModuleLoadException,说它找不到我的C++/CLI程序集或它的一个依赖项 如果我用.NET程序集替换C++/CLI程序集,一切都会正常工作 那么,我的问题是,是否可以导出一个实现了C++\CLI接口且导出类型为该接口的类 为什么要在C++/CLI库中定义接口?我希望我们能继承的C++ DLL实际上可以在C++的CLI库中定义它们的契约,并有C类库引用契约DLL。C++ cli 是否可以导出C++;与MEF和Prism的CLI接口 我有一个C++库中定义的C++接口(用/CLR开关编译) 我还有一个C#library,c++-cli,prism,mef,C++ Cli,Prism,Mef,我的C#库定义: -实现IModule接口的类。 -实现C++/CLI接口并用属性修饰的类 C#和C++\CLI库都部署在同一个文件夹中 我从Prism得到一个ModuleLoadException,说它找不到我的C++/CLI程序集或它的一个依赖项 如果我用.NET程序集替换C++/CLI程序集,一切都会正常工作 那么,我的问题是,是否可以导出一个实现了C++\CLI接口且导出类型为该接口的类 为什么要在C++/CLI库中定义接口?我希望我们能继承的C++ DLL实际上可以在C++的CLI库中
也许我的方法是错误的,如果您认为有更好的方法来实现这一点,请告诉我。我以前没有花太多时间使用C++/CLI,但由于它是一种符合CLS的语言,应该可以正常工作。这里有一个例子
// CPPMEF_CPP.h
#pragma once
using namespace System;
using namespace System::ComponentModel::Composition;
namespace CPPMEF_CPP {
[InheritedExportAttribute]
public interface class ILogger
{
public:
virtual void Log(System::Object^ obj) = 0;
};
}
在我的C#控制台应用程序中:
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition.Hosting;
using System.Linq;
using System.Text;
using CPPMEF_CPP;
namespace CPPMEF_CSharp
{
class Program
{
static void Main(string[] args)
{
var catalog = new AssemblyCatalog(typeof(Program).Assembly);
var container = new CompositionContainer(catalog);
var logger = container.GetExportedValue<ILogger>();
logger.Log("Test");
Console.ReadKey();
}
}
public class ConsoleLogger : ILogger
{
public void Log(object obj)
{
Console.WriteLine(obj);
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.ComponentModel.Composition.Hosting;
使用System.Linq;
使用系统文本;
使用CPPMEF_CPP;
命名空间CPPMEF_CSharp
{
班级计划
{
静态void Main(字符串[]参数)
{
var catalog=新的AssemblyCatalog(typeof(Program).Assembly);
var容器=新的合成容器(目录);
var logger=container.GetExportedValue();
logger.Log(“测试”);
Console.ReadKey();
}
}
公共类控制台记录器:ILogger
{
公共作废日志(对象obj)
{
控制台写入线(obj);
}
}
}
对于部署C++/CLI程序集,应该没有特殊要求,因为无论如何,部署时都是一样的。是否可以检查C++/CLI程序集是否也部署了任何依赖项