zoukankan      html  css  js  c++  java
  • 如何使用不同dll的相同namespace下的相同接口

    问题:

    程序里加载了2个dll,这2个dll里都声明了同样的命名空间(这个不违法),然后在这个同样的命名空间下,他俩又定义了同名的interface。

    然后我程序里直接using这个命名空间,使用这个interface的时候就有问题了,因为它已经被定义在2个地方了。

    有没有啥语法可以显示指出我使用哪个dll里的命名空间里的该类型?

    解决办法:

    1. 用alias。

    Main App:

    extern alias Lib1;
    extern alias Lib2;
    using System;
     
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine((new Lib1::MS.Lib.Class1()).Run());
                Console.WriteLine((new Lib2::MS.Lib.Class1()).Run());
            }
        }
    }

    主程序设置。

    Lib1:

    namespace MS.Lib
    {
        public class Class1
        {
            public string Run()
            {
                return "MS.Lib1.Class1Run().";
            }
        }
    }

    Lib 2:

    namespace MS.Lib
    {
        public class Class1
        {
            public string Run()
            {
                return "MS.Lib2.Class1Run().";
            }
        }
    }

    2. 用property DllImport如下:把Lab1 封到另一个namespace下。直接被主程序调用。


        [DllImport("Lab1.dll", EntryPoint = "ChangeWindowMessageFilter", SetLastError = true)]
            [returnMarshalAs(UnmanagedType.Bool)]
            private static extern bool _ChangeWindowMessageFilter(WM message, MSGFLT dwFlag);


  • 相关阅读:
    “ODBC驱动程序不支持动态记录集”错误的解决
    Pro *C/C++学习笔记(一)
    探讨全局变量的析构顺序
    指针和数组关系初探
    (转)Visual C++开发工具与调试技巧整理
    对利用Session纪录datagrid模板列中CheckBox的状态的一点改进
    大学老师列传
    重读保尔的意义
    Rich Edit控件的使用
    C++程序员常用工具集
  • 原文地址:https://www.cnblogs.com/riskyer/p/3320251.html
Copyright © 2011-2022 走看看