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文件里拷贝的)总是报 ,怎样调用呢?很急人呢
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文件里拷贝的)总是报 ,怎样调用呢?很急人呢
public static extern uint Init(string pszRegKey);
[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);
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
1、获得dll句柄
2、使用
3、释放
虚方法,这个是C++类的成员方法. C#中是不能直接使用C++的类方法的.要么是C形式的导出的函数 然后再[DllImport..],要么把你这个C++ 类库开发成COM然后再引用.
所以以上那些方法都行不通的啦.
这不是需要一个参数吗?你在C#里也得声明并传递参数呀
你到头文件中再确认一下,virtual DWORD Init(LPCTSTR pszRegKey=SYSTEM_ENAME); 这个确实是C++类中的成员函数吧,C是没有virtual function.如果是C++成员函数,你要明白,是不能在C#中调用的。这个原理三言两语可能讲不清,首先C++的函数是thisCall, 实际参数要多一个,是指针的。解决方法不是没有。但都不简单。1 .用C在封装一下,2. 包装成COM。