您的位置:首页 > 编程语言

走近COM Interop--编程以实现COM-->Assembly

2005-01-28 15:55 281 查看
  这篇文章是《走近COM Interop》系列的最后一篇,也是涉及技术点最多的一篇。希望我的描述大家能看到懂private enum[/b] RegKind



  注:上述类的说明来自MSDN。

  大家都看到了,上述几个类中,仅有StrongNameKeyPair是可选的,这是因为如果我们不需要生成PIA,那么是不需要使用这个类的。同时,如果需要生成PIA,那么需要提供相应的密钥文件。在后面的描述中,我们将使用《走近COM Interop--浅谈PIA》中的例子做进一步的演示。

二、实战演练

  在此,我们仍就由VB生成的PIADemo.dll展开演示。

1. 载入一个COM组件

Object typeLib;

LoadTypeLibEx("PIADemo.dll", RegKind.RegKind_None, out typeLib); 

        

if(typeLib == null )

public class ConversionEventHandler: ITypeLibImporterNotifySink

3. 将COM类型库生成程序集

 A. 生成PIA Assembly

FileStream stream = new FileStream("common.snk", FileMode.Open);

try

catch(Exception ep)

TypeLibConverter converter = new TypeLibConverter();

ConversionEventHandler eventHandler = new ConversionEventHandler();

AssemblyBuilder ab = converter.ConvertTypeLibToAssembly(typeLib, "interop.PIADemo.dll", 0, 

eventHandler, null, null, null, null);    

ab.Save("interop.PIADemo.dll");

MessageBox.Show("Importing is ok.");

Assembly asm = Assembly.LoadFile(Application.StartupPath + @"\interop.PIADemo.dll");

Type t = asm.GetType("interop.PIADemo.TestClass");

object obj = t.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);

string ret = (string)t.InvokeMember("Format", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | 

   BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, new object[]{"Go!"});

MessageBox.Show(ret);

 需要说明几点:

 1. 上述示例中使用的PIADemo.dll和Common.snk都需要被copy至测试程序的bin目录中,否则,就需要指定可达到的文件路径。

 2. Assembly.LoadFile的参数是要加载的文件的绝对路径,相对路径将会引发异常。

  至此,本系列文章全部完成。因本人水平有限,有不对的地方,欢迎指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐