我现在有很多个VC写的动态库,他们是相互协同完成一些工作的,现在要用C#还调用VC这些动态库,但因为这些导出函数要很多自定义结构的参数,如果直接调用, 那就要对这些自定义的结构进行类型转换,这个做起来太麻烦了,所以现在想添加一个用VC把这些库组织好工作的控件,给外面的接口都是基本的类型,这个C#调用起来就方便了,但是现在问题是,这个中间处理用什么呢?不知道DLL,还是COM或者其它,我用DLL试了,好像是无法导入,COM呢,C#不怎么会调用,调用总是有异常...,各位请来帮帮吧,不知道我说明白没有,如下图 VC          VC                                         C#现在功能的  想要添加的
 多个dll   中间处理,
              用什么进行封装好?                        调用者 

解决方案 »

  1.   

    COM是可以调用的,只是要注意,在函数返回值和参数里有指针的情况下,C#无法正确处理指针,尤其是指针为NULL值的情况,并且不报错,经常是运行通过了却没效果,郁闷...
      

  2.   

    那我要传入路径要传什么啊?我调用com是这样写的
    Type ac;
    object[] paramArray = new object[1];
    object acObject;
    ac = Type.GetTypeFromProgID("VIDEOACTIVE.VideoActiveCtrl.1");
    acObject = Activator.CreateInstance(ac);
    ac.GetInterface("IFun");
    paramArray[0] = "c:\\test.mpg";
    bool B = (bool)ac.InvokeMember("GetSum", BindingFlags.DeclaredOnly |
                    BindingFlags.Public | BindingFlags.NonPublic |
                    BindingFlags.Instance | BindingFlags.InvokeMethod,
                    null, acObject, paramArray); //这里总是异常退出
      

  3.   

    c#要使用Active是不是要先转换成托管代码啊?如何转换
      

  4.   

    http://www.wantsoo.com/ArticleShow/7227.aspx
    这个网站说,直接可以用啊
    tlbimp我试了,说是有错误,无法转换,是不是因为我的dll里面调用了其它的dll
      

  5.   

    标准COM肯定是可以在C#里调用的,只要不涉及到指针,可惜我不懂C#,正准备学习。
      

  6.   

    用tlbimp 还是不行啊!!!1tlbimp Test.ocx /out:Test.DLL
    然后添加引用,再using 
    TestClass test = new TestClass();
    test.MsgBoxTest();//这里出错了