日期:2014-05-18  浏览次数:20436 次

C#怎么调用VC++写的DLL
VS2008中,新建项目(MFC->DLL)在里面写了一个函数:
extern "C" __declspec(dllexport) int mySum(int a,int b)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
TRACE("Entering DLLAdd\n");
return (a+b);
}

编译通过后,把里面的MFC_DLL.dll拷到网站根目录下的BIN文件夹里。
然后,在其中一页面(如demo.aspx.cs)中,有:
public partial class demo : System.Web.UI.Page
{
  [DllImport("MFC_DLL.dll", EntryPoint = "mySum", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
  public static extern int mySum(int a, int b);
   
  protected void Page_Load(object sender, EventArgs e)
  {
  this.addres.Value = mySum(3, 5).ToString();//前台页面有一个input框。
....
}

浏览出现:
System.DllNotFoundException: 无法加载 DLL“MFC_DLL.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

但是我重新新建一个windowFormApp(C#)的项目,在里面也是相同的写法,然后,把DLL文件拉到debug文件夹中,运行。正常。
请问,在WEB方式中出错,为什么?
由于WEB不需要编译(之前修改CS文件中一些代码,前台刷新就能看到修改的效果,无需生成,编译等)。与这个有关吗?

------解决方案--------------------
MFC_DLL.dll好像要包括在项目中才有效
------解决方案--------------------
右web项目中 右键->添加引用,将此dll引入web 项目中.