我需要在给定的dll中未知的结构作为函数参数。
我想处理两种不同的类型。类型生成为两个不同的dll。我通过Xml-Serialization实例化了其中许多类型。第三方应用程序加载dll,并开始从给定的xml文件创建实例。然后,我遍历实例并从dll调用一个函数来执行类似导出的操作。在处理时,我想共享全局数据,以共享给下一个实例。问题在于,他们不了解全局数据。他们只有一个函数参数typeof(object)。如果我在每个dll中实现相同的结构,则无法将其强制转换为该结构,因为dll A和dll B不同。那我该怎么办...?
//Third party application
object globalData = null; //Type is not known in this application
//serialisation here...
I_SVExternalFruitExport[] instances = serialisation(....);
foreach(I_SVExternalFruitExport sv in instances)
{
globalData = sv.ProcessMyType(globalData, sv);
}
//--------------------------------------------------------
// one DLL AppleExport implements I_SVExternalFruitExport
using Apple.dll
struct s_mytype // s_mytype is known in this dll
{
List<string> lines;
...
}
local_sv;
public object ProcessMyType(object s_TypeStruct, object sv)
{
local_sv = (Apple)sv;
if(globalData != null) globalData = new s_mytype();
else globalData = (s_mytype)s_TypeData;
//Do Stuff
return globalData;
}
//--------------------------------------------------------
// second DLL OrangeExport implements I_SVExternalFruitExport
using Orange.dll
struct s_mytype //s_mytype is known in this dll
{
List<string> lines;
...
}
Orange local_sv; // Orange is known because of using Orange.dll
public object ProcessMyType(object s_TypeStruct, object sv)
{
local_sv = (Orange)sv;
if(globalData != null) globalData = new s_mytype();
else globalData = (s_mytype)s_TypeData; //This cast says... s_TypeData is not s_mytype because of two dlls A and B but i know they have the same structure.
//Do Stuff
return globalData;
}
我需要一个在我的dll中已知但在第三方应用程序中未知的结构,因为我想重新生成我的dll,也许在该结构中包含更多信息。我不想每次更改dll时都更新第三方应用程序。
答案 0 :(得分:0)
我认为我得到了答案: 我将使结构s_mytype {}也可序列化:
[Serializable]
public struct s_mytype
{
public List<string> lines;
[System.Xml.Serialization.XmlElementAttribute("Lines", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string[] Lines
{
get { return lines.ToArray(); }
set { lines.AddRange(value); }
}
}
我的函数“ ProcessMyType()”现在必须返回带有xml数据的字符串:
public string ProcessMyType(object s_TypeStruct, object sv)
现在唯一的事情是,“ Apple”或“ Orange”的每个实例都必须首先对xml进行反序列化,并且每个实例的大小都越来越大。 我的生成器保证每个dll中都具有相同的s_mytype结构。
也许这篇文章使问题更加明确。如果有更简单的方法或诸如反序列化之类的较少过载的方法,请告诉我。