本人是个.NET初学者(C#)已经有个用VC++写好的DLL,我想在客户端调用它.我具体的做法是先利用DLLIMPORT把他封装在一A.CS,在里面重写了DLL里对应的函数(A),然后再在WEB服务W.ASMX中写个函数(B)调用A.CS里重写的那个A函数,然后又在一IO.JS里写个函数C通过XML调用W.ASMX的函数B,再在一D.ASPX的HTML的SCRIPT代码里调用IO.JS里的那个函数C,可发现网页报错!"系统找不到指定的资源"(DLL库已放在SYSTEM32里),真是郁闷.不知到底该怎样才能在客户端调用DLL里的函数,望哪位高手能救助一下小弟,急!!!

解决方案 »

  1.   

    这里讲述的是C#调用标准动态库的问题,在我以前的文件中讲到过,C#调用Win32API,原理是一样的.这里我详细讲解用C写一个标准的动态库,然后让C#调用.(本篇适合初学者,中间没有任何冗余代码,简洁明了)
     软件环境:VC6.0(当然其他版本的VC5也可以)
     1.制作标准动态库
    __declspec(dllexport)int__cdecladd(int,int);//这一句是声明动态库输出一个可供外不调用的函数原型.
    intadd(inta,intb){//实现这个函数
     returna+b;
    }
    以上简单3行代码,声明一个add的方法,输入参数是两个int参数,返回这两个数之和.保存为MyLib.c
    然后执行编译命令.
    H:\XSchool\C#-School\HowTo>cl/LDMyLib.c
    Microsoft(R)32-bitC/C++OptimizingCompilerVersion12.00.8168for80x86
    Copyright(C)MicrosoftCorp1984-1998.Allrightsreserved.MyLib.c
    Microsoft(R)IncrementalLinkerVersion6.00.8447
    Copyright(C)MicrosoftCorp1992-1998.Allrightsreserved./out:MyLib.dll
    /dll
    /implib:MyLib.lib
    MyLib.obj
      CreatinglibraryMyLib.libandobjectMyLib.exp确信有以上输出,说明编译成功生成了动态库. 2.编写C-Sharp程序调用该动态库
    usingSystem;
    usingSystem.Runtime.InteropServices;//这是用到DllImport时候要引入的包publicclassInvokeDll{
     [DllImport("MyLib.dll",CharSet=CharSet.Auto)]
     staticexternintadd(inta,intb);//声明外部的标准动态库,跟Win32API是一样的.
     
     publicstaticvoidMain(){
      Console.WriteLine(add(10,30));
     }
    }
    保存为InvokeDll.cs文件,与MyLib.dll置于同一目录,编译该文件.
    H:\XSchool\C#-School\HowTo>cscinvokedll.cs
    将生成Invokedll.exe,可以执行该文件.
    以上是C-Sharp调用标准动态库的全过程
      

  2.   

    oakor(),有没有什么方法不使用[DllImport]而实现对动态库的调用?