好的,这应该是一个非常简单的问题
我正在研究一种需要动态加载包含mod内容的外部DLL的游戏引擎类型的东西。问题基本上是这样的:
在我的引擎中,我有以下内容:
public class Mod
{
public abstract void OnLoad(ModLoadedArgs args);
}
如果我要在DLL中放入以下内容:
public class ContentMod : Mod
{
public void OnLoad(ModLoadedArgs args)
{
BaseEngine.Dictionary.Register(new Thing()); // BaseEngine.Dictionary is
// a static object
}
}
这会正常吗?
对于基本问题,我很抱歉,我刚接触DLL并且无法访问笔记本电脑上的IDE,或者我会尝试自己。
编辑1:
所以...到目前为止一直很好,除了.Load似乎没有改变我在Program.cs中的oreDict对象 我觉得这是一个愚蠢的问题,但仍然伤到了我的脑袋。
Assembly a = Assembly.LoadFrom(files[i]);
foreach (Type t in a.GetTypes())
{
if (t is Mod)
{
((Mod)t).Load(new ModOnLoadArgs(oreDict));
}
}
编辑2:
所以我添加了一个' Console.WriteLine'调用我的Mod的Load函数,什么都没有出现。应该说点什么吧?我不会疯了吗?我可以更好地测试一下吗?
答案 0 :(得分:2)
DLL需要引用你的引擎,这有点不方便,因为这会使你的引擎更改内容变得更加困难 - 你必须小心不要破坏DLL开发人员的向后兼容性。 / p>
另一种解决方案是创建一个仅包含mod设计者所需接口的库:
public interface IMod
{
void OnLoad(ModLoadedArgs args);
}
此接口库将由您的引擎和mod开发人员引用 - 它是两个系统之间的合同。此界面很少会改变,您可以随意开发和修改引擎。
答案 1 :(得分:0)
是。它会很好地工作。