请给出详细解决方案,最好有例子

解决方案 »

  1.   

    COM的话就直接引用,不是的话就DllImport。
      

  2.   

    期待中...是不是调用vc的dll和调用其他语言比如delphi,vb的一样啊???????
      

  3.   

    using System.Runtime.InteropServices;[DllImport("VC.DLL", EntryPoint="GetName")]
    public static extern int GetName(
        string strID);
      

  4.   

    using System.Text;
    using System.Runtime.InteropServices;[DllImport("VC.DLL", EntryPoint="GetName")]
    public static extern int GetName(    
        int intPara1,
        out intPara2,
        ref intPara3,
        string strPara4,
        out string strPara5,
        ref string strPara6,
        StringBuilder strPara7);
    部分参数对照表:
    C++ I/O C# 
    char kaigo_path[MAX_PATH] 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 long另:StringBuilder在使用时,必须指定大小:
    StringBuilder strPara = new StringBuilder(255);
      

  5.   

    借宝地问一下,我也是遇到了这个问题。用C#调用VC++编写的win32的dll,我的接口函数是void型的,且没有参数(就是让它在控制台输出一个数)但总是会出现NoneDllFoundException的异常,我把dll文件复制到cs文件同一目录也没用,不知是怎么回事呀?
      

  6.   

    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 long
      

  7.   

    Dll文件应该放在exe输出目录,例如debug 或者release下,再就是将dll注册到window下,就可以找到了.
    关于dll的创建,应该将Vc代码函数以extern "C" __declspec(dllexport) 处理后再被调用。
      

  8.   

    假设另一个工程中的所有类都编译到一个dll文件中了,在这很多的类当中,有一个类叫StringUtil,名称空间在HSMP.CommonBasic.Common下
    该类中有一个方法:
    public double GetSum(double x,double y)
    {
    return x+y;
    }
    编译后dll文件的存放路径是:D:\Test\HSMP.CommonBasic.dll
    现在的问题是,如何通过程序调用该dll文件中的GetSum方法
    大概有以下几步:
    using System.Reflection;
    A.
    //这里要用LoadFrom,只有在本工程里添加了该dll的引用后才可以使用Load
    Assembly objAss = Assembly.LoadFrom(@"D:\Test\HSMP.CommonBasic.dll");
    //HSMP.CommonBasic.Common.StringUtil类的全路径
    Type t=objAss.GetType("HSMP.CommonBasic.Common.StringUtil"); 
    //动态生成类StringUtil的实例
    object obj=System.Activator.CreateInstance(t);
    //参数信息,GetSum需要两个int参数,如果方法没有参数,就声明一个长度为0的数组
    System.Type[] paramTypes = new System.Type[2];
    paramTypes[0] = System.Type.GetType("System.Int32");
    paramTypes[1] = System.Type.GetType("System.Int32");
    //找到对应的方法
    MethodInfo p = t.GetMethod("GetSum", paramTypes)
    //参数值,如果所调用的方法没有参数,不用写这些
    Object[] parameters = new Object[2];
    parameters[0] = 3;
    parameters[1] = 4;
    object objRetval = p.Invoke(obj, parameters); //如果没有参数,写null即可。
      

  9.   

    using System.Runtime.InteropServices;[ DllImport ( "kernel32" ) ]
    private static extern int WritePrivateProfileString(string section ,string key , string val , string filePath ) ;
    #region 写INI文件
    /// <summary>
    /// 写入INI文件的方法
    /// </summary>
    /// <param name="section">段值</param>
    /// <param name="Key">INI文件的键名</param>
    /// <param name="sVal">INI文件的键值</param>
    public static void WritePara(string section,string Key,string sVal)
    {
    try
    {
    WritePrivateProfileString(section,Key,sVal,fileName);
    }
    catch(System.Exception e)
    {
    m_log.cWriteLog.WriteErrMsg(e);

    }
    }
    #endregion