c#中如何访问调用C++写的DLL,有库文件.
谢谢..急/

解决方案 »

  1.   

    按照下面的方法试试吧:
    1、对于标准的api函数
    using System.Runtime.InteropServices;[DllImport("XXX.DLL",EntryPoint="GetApiFunction",SetLastError=true)]
    public static extern int GetApiFunction(
        string strParaA,
        StringBuilder strParaB,
        int intParaC,
        out int intParaD,
        bool blnParaE);C++数据类型和C#的部分对应关系:C++           输入输出    C# 
    ==================================
    char chr[255]   O    StringBuilder
    KCA_DIR         I    int
    LPCSTR          I    string
    int             I    int
    LPSTR           O    StringBuilder
    int*            O    out int
    DWORD           I    int
    DWORD*          O    out int
    BOOL            I    bool
    Rc_DBMgr        I    IntPtr
    long*           O    out long2、对于非标准的api的调用:
    A:引入XXX.DLL到项目;(如果Get_Name在:XXXNameSpace.YYYClass.Get_Name())
    B:
    XXXNameSpace.YYYClass clsYYY = new XXXNameSpace.YYYClass();
    clsYYY.Get_Name();3、如果1和2都不行的话,那就需要为该c++的dll增加c#调用的入口了。
      

  2.   

    我引用的时候提示我说该DLL文件不是有效的DLL文件,必须要有DLL的扩展名或COM
    但我引用的是一个C++写的DLL文件
      

  3.   

    先引用这个DLL文件(如果没有注册,则来自具体的路径)
    再using基本没有什么问题啊。
      

  4.   

    我引用的时候提示我说该DLL文件不是有效的DLL文件,必须要有DLL的扩展名或COM
    但我引用的是一个C++写的DLL文件
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++是的,C#不能直接引入C++的DLL,必须通过以上我提供的方法才可以的哟。
      

  5.   

    那个..麻烦一下,我就是不知道怎么个写法..汗!!
    3、如果1和2都不行的话,那就需要为该c++的dll增加c#调用的入口了。特别是这个,因为不是标准API,但是你提供的第2种办法更是让我看的云里雾里..能不能,最好是能举个实际例子?
      

  6.   

    关于第二种方法,是这样的:
    1、
    通过命令行的方式,注册该C++的DLL
    regsvr32 DLL的完整路径2、
    在C#的项目中,引入该C++的DLL
      

  7.   

    C++写的不是一个COM所以不能引用,在c#里面我们可以将C++生成的dll当做是非托管代码调用,也就是通过[DllImport("sss.dll",CharSet=CharSet.Auto)]
    public static void 函数名(para1 , para2)
      

  8.   

    swordragon(古道热肠) ( ) 信誉:100 
    唉,连注册都不行,说是没有DLLRegisterServer的输入点..怎么办?..555
     jacklin_036() ( ) 
    这样引用不需要写完整路径么?
      

  9.   

    打个标记,回头来仔细品味,我没仔细了解过。只是改改dll在vc里的声明为c#的就可以了。
      

  10.   

    1、你的这个dll还调用别的dll了吗?
    如果还调用了别的dll的话,请把它们放到一个目录下后再注册。2、试试第一种方法吧,如果还不行的话,那就只好修改C++的DLL,写一个C#调用的入口了。
      

  11.   

    wuyazhe(我的宝贝叫阿刺) ( ) 信誉:100 
    在VC里怎么把声明改为C#的...-_-||