using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication3
{
    class Program
    {        [DllImport("D:\\DIPS3.0\\Info\\Bin\\Search.Dll", EntryPoint = "Init", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
        public static extern uint Init();        static void Main(string[] args)
        {
            try
            {             
                uint result = Init();
                Console.WriteLine(result);
                Console.Read();              
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Console.Read();
            }
        }    }
}附:virtual DWORD Init(LPCTSTR pszRegKey=SYSTEM_ENAME);(从Search.h文件里拷贝的)总是报 ,怎样调用呢?很急人呢

解决方案 »

  1.   

    com 的用regsvr32 注册,不是com的直接在工程管理目录reference 上右键 addreference -〉browse->OK为什么要写在代码里面呢
      

  2.   

            [DllImport("D:\\DIPS3.0\\Info\\Bin\\Search.Dll", EntryPoint = "Init", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)] 
            public static extern uint Init(string pszRegKey); 
      

  3.   


         [DllImport("D:\\DIPS3.0\\Info\\Bin\\Search.Dll", EntryPoint = "Init", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)] 
            public static extern uint Init(string SystemName); 
    看看能用不或则     [DllImport("D:\\DIPS3.0\\Info\\Bin\\Search.Dll", EntryPoint = "Init", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)] 
            public static extern uint Init(StringBuilder SystemName); 
      

  4.   

    Search.Dll放到程序同一目录bin\debug
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  5.   

    通用的方法是
    1、获得dll句柄
    2、使用
    3、释放
      

  6.   

     很明显.virtual DWORD Init(LPCTSTR pszRegKey=SYSTEM_ENAME);
    虚方法,这个是C++类的成员方法. C#中是不能直接使用C++的类方法的.要么是C形式的导出的函数 然后再[DllImport..],要么把你这个C++ 类库开发成COM然后再引用.
    所以以上那些方法都行不通的啦.
      

  7.   

    haiwangstar 朋友,你的答案因该是什么呢? .h文件里是许函数,.dll应该实现了啊,我调用的是dll里的函数啊
      

  8.   

    Init(LPCTSTR pszRegKey=SYSTEM_ENAME
    这不是需要一个参数吗?你在C#里也得声明并传递参数呀
      

  9.   

    wis2007 兄弟:
    你到头文件中再确认一下,virtual DWORD Init(LPCTSTR pszRegKey=SYSTEM_ENAME); 这个确实是C++类中的成员函数吧,C是没有virtual function.如果是C++成员函数,你要明白,是不能在C#中调用的。这个原理三言两语可能讲不清,首先C++的函数是thisCall, 实际参数要多一个,是指针的。解决方法不是没有。但都不简单。1 .用C在封装一下,2. 包装成COM。
      

  10.   

    解决方法不是没有。但都不简单。1 .用C在封装一下,2. 包装成COM。解决方法不能说难。但是都比较烦琐。