导航:首页 > 编程语言 > phpvbdll文件

phpvbdll文件

发布时间:2022-08-03 03:04:08

php调用dll文件里面的函数

1、首先从www.php.net网站上下载php源码,此处以php-5.2.17版本为例,下载后解压至E:盘根目录下(目录可以自己随意定)。
2、下载安装VC++ 6.0,因为PHP源码是利用6.0版本写的,所以使用这个版本编译不会出现意外,别的版本未测试。
3、把VC++ 6.0安装目录中的 Microsoft Visual Studio\Common\MSDev98\Bin 绝对路径添加到系统环境变量中。
4、进入E:\php-5.2.17\ext目录,复制skeleton文件夹,并重命名为要开发扩展的名字,本例为“myfun”。
5、重命名skeleton.c为myfun.c,skeleton.dsp为myfun.dsp
6、编辑myfun目录中的php_skeleton.h、myfun.c、myfun.dsp这三个文件,替换内容中所有extname为myfun,EXTNAME为MYFUN。(一定要严格区分大小写)
下面就进入到编码阶段:
7、打开php_skeleton.h文件(头文件),找到PHP_FUNCTION(confirm_myfun_compiled);,在 PHP_FUNCTION(confirm_myfun_compiled);,下面编写PHP_FUNCTION(mb_MessageBox);,声 明一个mb_MessageBox函数,此函数的作用仅是输出js弹出一个alert消息框,用于测试。
8、下面定义函数入口,打开myfun.c文件,找到PHP_FE(confirm_myfun_compiled,NULL) ;,在下面编写 PHP_FE(mb_MessageBox,NULL),此处注意一下,PHP_FE是定义的一个宏,所以后面不用加引号。
9、在myfun.c最后面编写函数的实体部分:

PHP_FUNCTION(mb_MessageBox)
{
char *arg = NULL;
int arg_len, len;
char *strg;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
}

len = spprintf(&strg, 0, "<script>alert('%s')</script>",arg); //此处正是输入的js代码
RETURN_STRINGL(strg, len, 0);
}

到这代码书写就完成了,下面开始编译:
10、开始->运行,输入CMD,打开命令行窗口。
11、进入myfun的目录,输入 msdev myfun.dsp /MAKE "myfun - Win32 Release_TS",回车编译。
12、如果没有错误,在E:\php-5.2.17下会生成一个Release_TS文件夹,在里面就可以找到php_myfun.dll文件。
至此扩展dll开发完成,下面在php中进行测试:
13、把php_myfun.dll复制到原php目录中的ext文件夹内。
14、打开php.ini文件,添加当前dll的扩展 extension=php_myfun.dll
15、重启apache,在网站目录下新建一文件,输入以下内容:
<?php
echo mb_MessageBox("测试PHP扩展DLL by 马犇");
?>
浏览即可看到效果

⑵ PHP引用DLL里面的引用型参数类型的函数(dll是用VB做的)

如果你在PHP中这样使用,达不到在VB中”传引用“的效果,

也许你这个可以很简单的改一下DLL代码,实现你的目的。

因为你只是想”改一个变量的值“,目前还是用的Sub,这很好办:

①把Sub 改为 Function ,把它的返回它的返回值赋值给c。

PublicFunctionprintfMin(ByValvalueLightAsInteger,_
ByValvalueUpAsInteger,_
ByValvalueLightAndUpAsInteger,_
ByRefvalueMinAsInteger)AsInteger
IfvalueLight<=valueUpThen
IfvalueLight<=valueLightAndUpThen
valueMin=valueLight
ElseIfvalueLight>valueLightAndUpThen
valueMin=valueLightAndUp
EndIf
Else
IfvalueUp<=valueLightAndUpThen
valueMin=valueUp
ElseIfvalueUp>valueLightAndUpThen
valueMin=valueLightAndUp
EndIf
EndIf
printfMin=valueMin'加上这句
EndFunction

这样改了,还不影响原VB代码对这个的使用。

②PHP的改为(我不会PHP,照着你的代码写的,如果有错,你自己修正吧^_^)

$c = 6;

$c = $word->printfMin(1,2,3,&$c);

不知道正确不,只要你能理解我的意思就行。

就是把调用printfMin后的返回值,再赋值给c。

⑶ PHP如何调用.dll文件呀

如果你确定你的扩展*.dll能在php
正确使用的话,首先需要把这个.dll文件复制到php的安装目录\ext文件夹下,然后修改php.ini文件,在
;;;;;;;;;;;;;;;;;;;;;;
;
Dynamic
Extensions
;
;;;;;;;;;;;;;;;;;;;;;;
配置节上,按照格式extension
=
a.dll添加该dll文件的引用,然后重新启动承载php的web服务器即可。

⑷ php添加扩展dll文件

你这个dll是你自己编译出来的还是网上下载的?请确保和你当前的php版本相符,然后放到ext目录,打开php.ini加上一句extension=xx.dll,最后重启Apache···然后看看你的phpinfo有没有相应的信息

⑸ VB怎么调用DLL文件 这个DLL文件是自己用VB写的放在主程序一个文件夹里面的,网上找了很多办法都不行。

网上 的一篇文章,看完应该对你有所帮助

再谈在VB中调用VC++开发的DLL
作者:未知 来源:月光软件站
近日开发一个程序,用到动态链接库,在VB中调用时遇到了一些问题。我查了一些资料,也看了一下CSDN上的文章,感觉这些文章对在VB中调用VC++开发的DLL这一问题阐述得不够详细。因此在我的问题得到解决之余,特为初接触DLL的朋友们写下这篇文章。

本文中关于调用约 定的解决方法,也适用于解决其它编程语言之间DLL调用的兼容问题。

①关于DLL的创建与调用

使用VC++的向导即可。具体操作如下:打开菜单“File\New”→选择“Projects\Win32 Dynamic-Link Library”→选择“A simple DLL project”即可。这时系统会自动生成3个文件:*.cpp,stdafx.cpp,stdafx.h。

之后将入口函数DLLMain()补充完整,再添加你自定义的函数的代码。如果你自定义的函数很多,可以将这些函数的声明部分统一写入一个头文件中。再在.cpp文件首部用“# include”语句引入这个头文件。注意函数声明前要加上“__declspec(dllexport)”。

(如果你建DLL时选择的是第三种类型(加入示例代码),则在函数声明及定义前都要加上系统定义的宏“*_API”。)

在VB中用如下语句声明:“Declare Function 函数名 Lib "完整路径\文件名.dll" [Alias "函数别名"] (ByVal 变量1 As 类型1, ByVal 变量2 As 类型2,…) As 类型3”,与调用API函数类似。

注意:若在窗体代码的“通用”部分使用,“Declare”前要加“Private”;若在Moudle中使用,“Declare”前要加“Public”。若将DLL文件放在“\Windows\System”或“\WinNT\System32” 目录下,“Lib”后只写出DLL主文件名即可。

具体的实例代码见④(修正后的,可直接运行)。

②关于入口点

如上编写Cipher.dll,运行,出现错误信息“找不到DLL入口点(Error 53)”。出现这一错误的原因是C++编译器在编译时对函数名Encrypt作了修改。打开快速查看程序(D:\WINNT\System32\Viewers\QuikView.exe),将Cipher.dll拖入查看窗口,找到字段“?Encrypt@@YAHHH@Z”,发现函数名被加了 一串字符。

解决方法有二。第一,直接在VB声明中将“?Encrypt@@Y AHHH@Z”作为别名放在“Alias”后即可;第二,在Cipher.dll代码中在语句“__declspec(dllexport) int __stdcall Encrypt(int p, int k); ”前加上“extern "C" ”,编译后,用QuikView查看,函数名变为“_Encrypt”,之后再在VB声明中做相应调整即可。

(对于使用宏的DLL,在“#define”语句中,对宏“Cipher_API”的替换值做更改即可。)

进行了③的更改后,程序又找不到入口点了。再用QuikVie w查看,发现函数名变为“_Encrypt@8”。还有解决方法。在Cipher.dll工程中添加一个文本文件,命名为“Cipher.def”,添加代码如④。编译后再用QuikView查看,函数名变回“Encrypt”,在VB中调用,运行正常。

③关于调用约定

采用②中第二种解决方法,运行,出现错误信息“DLL调用约定错误(Error 49)”。原因是调用约定共有4种方式:__fastcall、__pascal、__stdcall、__cdecl,VC++默认调用方式为__cdecl,而VB默认调用方式则为__stdcall。解决方法是,更改代码如下(限定调用方式):

extern “C” __declspec(dllexport) int __stdcall Encrypt(int p, int k);

…………

int __stdcall Encrypt(int p, int k)

{

int c = p+k;

return c;

}

④源代码

Cipher.dll:

Cipher.cpp:

//引入预编译头文件

#include “stdafx.h”

//声明我的函数

extern “C” __declspec(dllexport) int __stdcall Encrypt( int p, int k );

//DLL入口函数

BOOL APIENTRY DllMain( HANDLE hMole,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{

switch( ul_reason_for_call )

{

case DLL_PROCESS_ATTACH:

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}

//我的函数

int __stdcall Encrypt ( int p, int k )

{

int c = p + k ;

return c ;

}

Cipher.def:

LIBRARY Cipher

EXPORTS Encrypt

编译后,将Cipher.dll复制到“D:\WINNT\System32”目录。

在VB中调用:

Option Explicit

Private Declare Function Encrypt Lib “Cipher” _

(ByVal p As Long, ByVal k As Long) As Long

Private Sub Form_Load()

Dim c As Long

c = Encrypt(24, 8)

Text1.Text = c

⑹ PHP可以使用VB把他的核心代码封装成DLL嘛

PHP使用VB封装成DLL?没有试过。

不过,Zend Corporation (http://www.zend.net)
开发的产品 Zend Studio 可以装PHP进行编译,编译过的PHP运行速度比不编译的要快。而且,因为编译后生成的是二进制文件,所以,Zend Studio 也就达到了为PHP加密的功能(虽然国内已经有人开发了一种能对被Zend Studio某些版本编译过的PHP进行反编译,从而得到源代码)。Zend Studio并不是免费的。

经过编译后的PHP程序不能够再运行,你的服务器上必须装有Zend 公司的另一免费产品:Zend Optimizer。使用Zend Optimizer 后,就可以在你的服务器上正常运行编译过的PHP程序了。

⑺ 用VB编写的ACTIVEX DLL,asp页面调用时是正常,php调用结果不对

那是因为php和asp还有vb里面字符串的格式不同
vb的字符串是个BSTR结构,asp应该也是,但php的字符串有它自己的结构
所以你把php的字符串传给vb的dll会出问题, 就像在vc里面把字符串传给vb的dll不处理的话也会出问题(要先转成bstr才行)

php转bstr很难……几乎实现不了。如果你非要这么用,那你要改一下你那个组件里的函数:
传递进来的参数你要按照php的字符串格式来解析,并且返回也要返回php的字符串。php字符串的格式可以去zend的官方网站上面找找,做php扩展里面有介绍。另外你可以在你那个函数里再加一个32位数字型参数(long),表示传进来的asp还是php的字符串,分别对待

⑻ php里使用DLL内的方法

http://www.php.net/manual/zh/faq.com.php
官方文档都说了,不行的哦。

另外DLL的WebService,那应该是C# or VB .net的吧,既然是webservices,那你可以尝试通过http方式和这个WebService交换数据吧。(简单的说就是2个不同的网站通过http交换数据,就像哪种采集程序、或者web api,如:sina api,微信api)

阅读全文

与phpvbdll文件相关的资料

热点内容
字母h从右往左跑的c语言编程 浏览:121
安卓手机如何拥有苹果手机横条 浏览:761
业余编程语言哪个好学 浏览:131
按照文件夹分个压缩 浏览:102
航空工业出版社单片机原理及应用 浏览:756
如何在电信app上绑定亲情号 浏览:374
安卓的怎么用原相机拍月亮 浏览:803
配音秀为什么显示服务器去配音了 浏览:755
c盘清理压缩旧文件 浏览:325
app怎么交付 浏览:343
图虫app怎么才能转到金币 浏览:175
如何做征文app 浏览:446
用什么app管理斐讯 浏览:169
安卓如何下载宝可梦剑盾 浏览:166
编译器开发属于哪个方向 浏览:940
megawin单片机 浏览:687
以色列加密货币监督 浏览:909
程序员前端现在怎么样 浏览:499
服务器和接口地址ping不通 浏览:557
linux命令返回上级目录 浏览:899