1.我在一个c# .net的工程中,引用一个dll,为什么有的能引用,有的不能引用?
它们有什么不同? 或者说dll分为哪几种?各有什么特点?对与不同种类的dll我应该如何使用?
3.网上下载的开源代码库很多是C编写,我如何将它们重新编译为dll。
如果想在c#的工程里使用这个由开源代码新编译的dll,我应该如何编译和使用?
如果想在VC++的工程里使用这个由开源代码新编译的dll,我应该如何编译和使用?小弟只有这么点分,以后有了一定会散给大家。

解决方案 »

  1.   

    托管DLL可以直接引用Com组件需要转换才能引用,或者VS自动帮你完成引用非托管DLL只能使用 DllImport 属性来引用
      

  2.   

    都叫车,为什么有的加汽油,有的充电,有的用脚踩?动态链接库只是个概念,不同平台有不同标准,不同标准有不同写法不同用法....NET只能直接引用托管DLL和ActiveX DLL,Win32 DLL只能DllImport导入...例...
    [DllImport("User32.dll")]
    static extern Boolean MessageBeep(UInt32 beepType);
      

  3.   

    不用很迷惑,稍微迷惑下就可以
    时间长了就知道了,又不是造导弹用托管语言(C++/CLR,C#,VB.NET,J#)调用.Net的类库生成的Dll都称为托管程序集,可以在工程中引用后直接使用里面的类其它的都是平台相关的DLL,有些符合COM规范的DLL微软包装后提供给.Net使用.如Office组件大部分是原始DLL(即不是COM,也不是程序集),必须用DllImport导入其中的函数再调用,而且在参数设置方面往往很麻烦
      

  4.   

    托管语言DLL:需要运行环境支持,基本上存储的是IL代码和相关资源。
    非托管DLL:二进制代码或者机器码。
    哎,一下说不清楚,还是系统的学习下计算机编程原理和组成原理可以解释你的疑惑。
      

  5.   

    大致分为3种:
    1、托管dll:
       举例:通过.NET生成的dll都是托管的可以直接引用。
    2、COM dll:
       需要通过Reg32命令来注册才能引用
    3、非托管dll
       举例:C++生成的非托管DLL
       需要dllImport引用
      

  6.   

    谢谢各位大虾,对小弟帮助真是太大了。那么对于第二个问题,我应该怎么办呢比如一个zlib-1.2.5.tar.gz,zlib的源码包。
    1.应该如何将其编译为dll?可以提供给,其他的windows下的工程(如VC等)使用?
       这种的是不是就不能编译为托管的dll呢?如果能的话,应该用什么方法呢?2编译时是使用微软的编译器和编译工具,还是使用gcc和GNU的编译工具?分别应该如何配置?能指点下大致的步骤和方法吗?3.在linux中,执行configure就可以生成makefile,在windows中要怎么生成makefile或者有其他的make方法吗?4.我顺着各位的指引搜了下,cygwin好像可以将其编译为windows下使用的dll,是不是用cygwin就可以解决我这个问题,就是“将网上下载的源代码(通常是C的),编译为windows下的工程可用的dll”这一最终目的。
    实际上我的最终目的是想,将一些开源库,编译为能在windows平台下,提供给其工程(如VC,VB,c#)等使用的dll.以上问题真的是太谢谢大虾们,帮忙指点下。 
      

  7.   

    linux的源码就不一定了,除非其无关平台特性或者声明了可以在Windows平台编译或者有专门的Windows版本...zlib是有Win32版本的,其他的库就要看是否支持Windows了...gcc也有Win32版本,当然也可以用VC++编译,只有源码符合Windows DLL标准...
      

  8.   

    VC.NET 可以直接用非托管 dll 
    所以如果我需要在 C# 中用非托管 dll,都会用 VC.NET 加个 .NET 的壳中转一下
    反过来也一样