本人是个.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里的函数,望哪位高手能救助一下小弟,急!!!
软件环境: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调用标准动态库的全过程