C#中调用C#写的动态库BirtXml.dll通过pInvoke方式:
string strDllPath = "BirtXml.dll";
FileInfo fi = new FileInfo(strDllPath);
if(!fi.Exists)
{
MessageBox.Show("不存在文件:" +strDllPath );
return;
}
//加载到程序集
Assembly a = Assembly.LoadFrom(strDllPath);
//查找接口类型
Type[] types = a.GetTypes();
Type myType = null;
foreach(Type t in types)
{
if(t.Name == "CommonXml") //类型应该统一
{
myType = t;
break;
}
}
//创建类型实例
if(myType == null)
{
return;
}
object obj = Activator.CreateInstance(myType);
MethodInfo method = myType.GetMethod("CreateXml", new Type[] {typeof(string)});object[] myRoot = new object[1]{"Para"};
bool bCreate = (bool)method.Invoke(obj, myRoot);//////*********************************************************************1、
使用method.Invoke这种方式很不直观,不查看代码不容易知道执行的是哪个方法
能否还有别的什么办法,可以方便的直接执行诸如: 接口.CreateXml(str)?是否是在BirtXml.dll中输出接口之类的东西.......:
***********************************************************************/////
interface IBritXml
{
//接口中定义的xml文档
XmlDocument XmlDoc
{
get;
} bool CreateXml(string root);
}public class BritXml:IBritXml
{
static XmlDocument m_doc = new XmlDocument(); //内存xml数据 public BritXml()
{
} //接口中定义的属性的具体实现
public XmlDocument XmlDoc
{
get
{
return m_doc;
}
} public bool CreateXml(string rootName)
{
.......
}
....
}2、都有哪些调用动态库的方式??早绑定迟绑定....
HELP!!!!!!!!! Thanks!!!
string strDllPath = "BirtXml.dll";
FileInfo fi = new FileInfo(strDllPath);
if(!fi.Exists)
{
MessageBox.Show("不存在文件:" +strDllPath );
return;
}
//加载到程序集
Assembly a = Assembly.LoadFrom(strDllPath);
//查找接口类型
Type[] types = a.GetTypes();
Type myType = null;
foreach(Type t in types)
{
if(t.Name == "CommonXml") //类型应该统一
{
myType = t;
break;
}
}
//创建类型实例
if(myType == null)
{
return;
}
object obj = Activator.CreateInstance(myType);
MethodInfo method = myType.GetMethod("CreateXml", new Type[] {typeof(string)});object[] myRoot = new object[1]{"Para"};
bool bCreate = (bool)method.Invoke(obj, myRoot);//////*********************************************************************1、
使用method.Invoke这种方式很不直观,不查看代码不容易知道执行的是哪个方法
能否还有别的什么办法,可以方便的直接执行诸如: 接口.CreateXml(str)?是否是在BirtXml.dll中输出接口之类的东西.......:
***********************************************************************/////
interface IBritXml
{
//接口中定义的xml文档
XmlDocument XmlDoc
{
get;
} bool CreateXml(string root);
}public class BritXml:IBritXml
{
static XmlDocument m_doc = new XmlDocument(); //内存xml数据 public BritXml()
{
} //接口中定义的属性的具体实现
public XmlDocument XmlDoc
{
get
{
return m_doc;
}
} public bool CreateXml(string rootName)
{
.......
}
....
}2、都有哪些调用动态库的方式??早绑定迟绑定....
HELP!!!!!!!!! Thanks!!!
但感觉和我的问题不一回事啊
我的问题事使用method.Invoke这种方式很不直观,不查看代码不容易知道执行的是哪个方法
能否还有别的什么办法,可以方便的直接执行诸如: 接口.CreateXml(str)?
只有动态加载和静态加载这两种用法了?
动态的必须Invoke?