我尝试在我的.net应用程序中使用三个php类。我使用Phalanger来接受这三个类,并使用以下命令创建一个.dll文件:
phpc /target:dll Client.php Crypt.php Exception.php当然,它输出了Client.dll和一个Client.pdb文件。
从那里,我转到VS2012,创建了一个新的asp.net应用程序,并添加了Client.dll作为参考。但是,我没有看到来自任何类的公共方法,对象浏览器窗口显示:
Client>Client>Base Types>Object (因此我只有类型对象的方法)
我尝试过这方法/教程来使它工作,这涉及到将自定义接口转换到对象上,但是我得到了错误:
无法找到类型或命名空间名称ScriptContext。
当然,这意味着它不知道ScriptContext的内容和位置。然而,本教程是从2007年开始的,所以我不知道它是不是太过时了,或者我应该从哪里得到这门课?
我发现的其他教程也一样古老。上面写着:
如果您想使用现有的PHP源代码(为标准解释器开发)而不作修改,您必须使用遗留模式,但是当您想要开发新的PHP项目时,可以考虑使用纯模式
但是我无法在文档中找到遗留模式的步骤,我更喜欢这样做,而不是尝试“纯”模式(这样我就不必更改/编辑我现有的php代码)。我确实尝试过(纯模式),但是它不会使用上面的命令(将DynamicObject.php类添加到命令)来编译。
如何在php类中访问我的公共方法?
发布于 2012-10-12 15:39:34
phpc /target:dll Client.php Crypt.php Exception.php以遗留(标准)模式创建DLL。这个DLL包含“怪异”的名称空间,这是与PHP语义兼容所必需的。(这些命名空间将代码与不同的脚本文件分开)。Foreanger3.0的.NET互操作概述博客文章描述了如何使用标准模式编译的脚本。
命令行选项/pure+告诉编译器创建所谓的纯模式程序集.在这种模式下,编译器将所有源文件连接起来,并作为一个文件编译它们(就像C#那样),而没有任何奇怪的名称空间。如果在PHP声明上指定[\Export]属性,则生成的DLL看起来将像从C#代码编译的那样,并且您将能够引用它并正常使用它的类。
https://stackoverflow.com/questions/12845562
复制相似问题