在使用SQLite的时候,下载了SQLite的ADO.NET2.0的驱动。它是一个Dll文件,但是我发现它除了封装了System.Data.SQLite命名空间之外,还能当作普通Win32 Dll文件使用,被C语言链接。把2种不同平台的库融合在一起是如何做到的呢?

解决方案 »

  1.   

    这个技术不错,整合的好,upUpUp
    C#专业 QQ群:1803321 欢迎加入!
      

  2.   

    我是c#的初学者,如果我说得不太好,请不要见怪。:)
    c#里面有个PInvoke服务,它是管理代码和未管理代码的桥梁,它可以使管理代码调用未管理代码中的函数(比如说user32.dll中的函数)。PInvoke服务可以跨过互用边界,定位和调用外部函数,并对其参数整合,包括整数、字符串、数组和结构等。
    PInvoke服务的主要步骤是:
    1、查找包含某个函数的自定义DLL.
    2、将DLL加载入内存;
    3、在内存中定位函数的地址,将其参数压栈,按需整合数据。这些动作仅在第一次调用该函数时发生;
    4、将控制权转给未管理的函数使用该服务时,应用程序需要使用属于System.Runtime.InteropServices命名空间,该命名空间里包括Marshal类和DllImport属性。其中Marshal类就是用来拷贝未管理的内存块,把未管理的类型转化成管理的类型。DllImport属性被使用在如下语句中,就可以使用user32.dll的函数了:
    [DllImport("user32.dll",EntryPoint = "FindWindow")]
    private static extern int FindWindow(string lpClassName,string lpWindowName);
    然后在main()里面使用:
    int iHandle=FindWindow(null,"Untitled - Notepad");
    就可以调用FindWindow()来返回一个记事本的类名了。
      

  3.   

    我补充一下问题:SQLite下载的时候自带一个SQLite3.dll和一个Def文件,用来产生lib文件。但是那个System.Data.SQLite.dll和这个自带的SQLite3.dll没有任何区别,配合那个def文件也能正常产生lib文件,用DLL Viewer查看时解析出的函数也一样。但是它同时可以被.NET SDK带的ILDAsm解析,而且用.NET反编译器也能反编译出正常的C#代码。
    同一个文件在两个平台上各自拥有功能,且互不影响。觉得很新奇。
      

  4.   

    .net产生的.dll(PE格式的)具有过去Windows可执行.dll程序库的全部结构,包括各种代码、数据段定义,入口程序。仅仅是扩充了其它的段落。当此.dll不能被旧的机制启动的时候,其实仍然是执行了旧的入口程序部分写的一段“警告”程序。
      

  5.   

    刚才一个朋友给了我System.Data.SQLite那个项目代码,发现目录中有一个工具叫mergebin.exe。从说明看,可以合并.NET DLL 和 Native DLL,没有代码,原理不明。
      

  6.   

    你搜索.net的各种不同的linker。不过我这实在看不出有什么必要。你不如研究更有用的,把多个assembly(dll和exe)合并在一起,以及可以将exe翻译成本地机器代码(脱离.net framework)。Salamandar、Xenocode等都有此功能。
      

  7.   

    up---------------------------------------------------------------------------------------------
    腰缠70元到月入近10万
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=453IT工程师 毕业4年我年薪涨到30万 
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=51126岁青年坐拥千万域名资产 从小玩家变成CEO 
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=515程序员的酸甜苦辣:告别Coding 
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=341从月薪3500到700万(一)
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=170网络草根月赚3000的十种方法
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=517如果我是女的 我肯定不会嫁给做网站的
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=512