发新话题
打印

PHP调用VS2005VC++写的dll控件

PHP调用VS2005VC++写的dll控件

这两天刚开始学习php,我以前是做asp程序的,因为ASP不好加密源代码导致我与现在的合作伙伴谈的条件不好谈,想到程序的商业性与保密性,有一些好的方法可以放在dll控件中,这两天研究了一下PHP调用dll的方法,其实还是很简单的。因为我没有学习C语言与C++语言,在VC++方面并不是很明白,只是搜了一些文章,总结了一些方法,希望大家更一步的交流。/ c) V4 B+ n4 _+ }; K: }. i
废话少说,直接开始操作吧
( G. p, b" B5 g! f  ~; f$ L# `6 g2 a+ }
" T/ L2 E9 q, f1 @5 v  _
测试环境:windows 2003 Server + IIS6 (PHP)+VS2005
2 ^2 z. v, F" {  w7 k0 |一、建立ATL工程3 y% e, o1 T& s( h/ T3 _
1、打开VS2005,新建空项目,我们这里建NFS(图1)- `$ R6 x" r" w9 s

$ }8 V) w5 k& e. d(图1)# g5 ^& j; e; l- `0 d8 j. A6 e8 U8 b2 |
2、在解决方案中,添加 >> 新建项目,命名:nfs,并选择DLL方式,如图2、图3$ k' R: ~. \2 u

2 K* t! K) _; {1 p4 Y# k& z图2
" L" B- o- @# D% k  Z: k, s$ \1 x; v8 |
图3
( O# |! M# Q& w3 T9 }3、打开类视图,在nfs节点上点击鼠标右键,选择 添加 >> 类,在这里我们选择“ATL简单对象”,如图48 O4 E+ G+ \. L2 o
- L  K5 C" ?3 B3 M' m+ W
图4
0 r8 C$ t' x' E  }- x. N/ S4、在添加向导窗口中,在c++简称栏目中填入:Fun,其它的项目会自动填写。如图5、图6
! m2 k3 C1 N% y( c; ]2 J* d6 i7 u8 s" s; T( O
图5
0 g2 q9 Z" z5 j3 F: v7 N
$ l3 M7 a" ]: y# j" x图63 A& K; G) }& P1 @1 k9 M; n7 o
5、添加show方法,选择类视图IFun,点击鼠标右键,选择“添加方法”。如图7
# s, A3 q* t  X& l; S% m/ x2 m7 h# D0 y5 I& y
图7
+ U& p' R( B* l1 x) S6、在添加方法向导中,方法名填写:show,参数我们写两个,其中最后一个参数是必须的,因为是要返回给PHP的值。如图8、图99 v( l! y. p* r# Q. t
& d1 Z+ u$ F8 {3 n* R: j; W
图8! f9 o' q: w- K5 l

6 s% r6 F# V( f. h图9
& u$ f/ ^8 F- o' L7、编写函数,并编译。打开Fun.cpp源文件,找到STDMETHODIMP CFun::show(LONG* pKeys, BSTR* pReturn)函数,在函数中加入代码,如图10,生成解决方案,在生成前,选择生成方式为:Release,如图11:, x0 S# g0 }" k3 E6 O3 [
BSTR temp = ::SysAllocString(L"PHP Hello Dll 071226");
+ ?, P1 v# |+ R* x  c: B$ O7 L* pReturn=temp;- P/ i' F4 }2 n( P

7 d3 {. @4 O' Q图10
6 j- M1 r1 t4 y$ \! f( n
, a# C% E) ~1 _/ Y' f9 e9 a图11
, ^* U( ~' ^/ h& ~8、停止iis,找到生成的dll文件,并通过regsvr32 nfs.dll命令注册dll文件。如图123 G" |0 V% d2 o+ L
, p5 r! U  [4 H5 h% x' E8 r
图12% J; d; @" G! j. e) I; z
9,至此文件dll已经完成制作与注册。在PHP中就可以调用了,效果如图13。: ^( V  w; \- ^" x
<?php' p' V6 L' x  p
2 ~  u9 p+ c+ N, `7 g% V
//2007年12月26日 星期二 11:34:08 lybkw# W/ z: z# V  q2 T2 X* |# A
$com = new COM("nfs.Fun") or die("无法建立COM组件");
7 k6 ?, ?) V1 c( Becho $com->show(1);  b) Q  I; l5 e# P  e* S1 f

( P$ P2 |* |5 j, N2 Z8 q$ [?>
- V" b$ m3 V+ P. X
8 D6 Y7 S8 @: D/ M; G7 K* v( @8 K" f
参考资料9 j* a9 H5 O, I# w  H- i8 k: N
杨老师的《COM 组件设计与应用(六)用 ATL 写第一个组件》
4 H! P7 ^) L4 C( R& m/ chttp://www.chinaddv.com/Dev/vc/2007/12-25/11985716668754.html

TOP

不错
! o6 g$ o3 i3 c
6 J& R& O8 }3 e0 ]呵呵  路过  
& A  V6 S& o+ \5 P1 ]; b5 ~支持一下
% i! N3 N, c2 H+ ~特价啦!!赶快抢购阿!!! 感谢236z论坛给予的发言机会!
, q7 ~' F# t4 C6 F1.8G标准空间 + 200M MYSQL/mssql +200M 邮局  =125元/年(赠送200M MYSQL(可独立管, n! K. M' S( }" d6 F5 p1 W6 b
理)+100M 10用户企业邮箱)http://www.hzfwq.com QQ:319061118
4 a: z9 C1 R/ \中国合租网缔造您的完美透明空间!

TOP

写的不丑哦 + W* N; H, |3 M: q2 \% u
支持一下8 y' X7 p9 ?) X$ [, ^1 z; j
特价啦!!赶快抢购阿!!! 感谢236z论坛给予的发言机会!( \. [- p+ Y# p. P7 d. z; s
1.8G标准空间 + 200M MYSQL/mssql +200M 邮局  =125元/年(赠送200M MYSQL(可独立管
" ]' Q+ N6 _0 r0 G7 J理)+100M 10用户企业邮箱)http://www.hzfwq.com QQ:319061118
6 K, W9 i0 F: z4 n: x' m中国合租网缔造您的完美透明空间!

TOP

发新话题