| | | 在Delphi和VC中创建和调用动态链接库 | | 2001-10-31·
·丛蓉 李恺··yesky
| 上一页 1 2 3 4 下一页 三、用VC创建DLL
在VC中创建DLL,与Delphi中的创建过程相似,步骤如下:
(1)新建一个DLL项目。MFC提供两种类型的动态链接库:常规型DLL、扩展型DLL。其中,常规型DLL适合于非MFC开发环境下采用支持DLL调用的程序设计语言开发的应用程序,扩展型DLL只能被MFC程序使用。
(2)创建该DLL中的过程或函数,只需在程序中加入下列语句:
extern "C" _declspec(dllexport) int yanzheng(CString input,char* zcm) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); file://具体实现过程 } | 该函数的功能是验证注册码是否合法,其中yanzheng为函数名,int为函数返回值类型,()内为函数参数。编译通过后即可使用。
四、 VC中DLL的调用
在VC中调用动态链接库时,类似于Delphi中运行时调用DLL的方法。也要调用到Windows的API函数LoadLibrary,GetProcAddress等。此方法对于调用其它语言和VC编译的DLL均适用。
假定DLL中包括一个函数:
| int yanzheng(CString input,char* zcm) | 首先在欲调用DLL函数的cpp文件前部先声明函数指针,定义函数类型:
| typedef int (* _YANZHENG)(CString,char* zcm); | 然后定义如下变量∶
HINSTANCE hLibrary; _YANZHENG yanzheng; | 在调用DLL处加入如下语句进行DLL装载:
hLibrary=LoadLibrary("zcdll.dll"); yanzheng=(_YANZHENG)GetProcAddress(hLibrary,"yanzheng"); shuchu= (*yanzheng)(shuru,zcm); FreeLibrary(hLibrary); | 五、 几点提示
(1)如果用Delphi创建DLL时用到其它的form,则在DLL的输出函数中应包括form的create(创建)和free(释放),而且在显示该窗口时只能用showmodal过程,不能用show过程,在后面的例子中能详细看到。
(2)如果Delphi创建的DLL中的函数或过程,用string类型作为参数输入或返回string类型,当用VC或其它程序调用时,经常会出错,反之亦然。为了解决这种情况,使不同程序之间在使用字符串类型时,接口更安全,建议使用pchar类型,而不是string类型。而且要在程序中加入内存管理,使用系统提供的sharemem单元。下面是一个实现将星期标识由数字转换成英文的例子:
uses sharemem; exports makeitaday; var mydate:pchar; function makeitaday(S:integer):pchar;stdcall;export; implementation function makeitaday(S:integer):pchar;stdcall;export; var thedate:array[0..20] of char; begin GetMem(mydate, 200); if s=1 then thedate:='Sunday '; file://………. strpcopy(mydate,thedate); makeitaday:=mydate; end; | 上一页 1 2 3 4 下一页 | | | 感谢
访问天极网,如果您觉得该文章涉及版权问题,请看这里!
|
|