我在我的应用程序中嵌入PHP(在Delphi 2010中编写),使用PHP4Delphi组件与php5ts.dll连接.我想我的程序充当PHP(sapi模块?)的扩展,因为它注册了一些可以在PHP脚本中使用的函数和常量......无论如何,在使用简单数据类型时效果很好,但是当我尝试使用多维数组时作为返回值我得到错误
Access violation at address 01CD3C35 in module 'php5ts.dll'. Read of address 0231E608.
堆栈列表
(000A2C35){php5ts.dll} [01CD3C35] destroy_op_array + $35
(004C4D61){myApp.exe } [008C5D61] php4delphi.TPHPEngine.ShutdownEngine (Line 1497, "php4delphi.pas" + 17) + $7
php4delphi.pas中的第1497行是调用的 tsrm_shutdown();
对我来说,它看起来像垃圾收集器在脚本结束时崩溃,所以我怀疑我没有正确地将数据发送回引擎...因此我的问题是如何将多维数组发送回PHP?
我正在使用的模式是
var subArray: pzval;
_array_init(return_value, nil, 0);
for x := 0 to Data.Count-1 do begin
subArray := MAKE_STD_ZVAL;
_array_init(subArray, nil, 0);
// populate subarray with data, including other subarrays
...
// add subarray to the main array
add_index_zval(return_value, x, subArray);
end;
Run Code Online (Sandbox Code Playgroud)
我是否必须"注册"我创建的子阵列?我必须增加或减少refcount或设置is_ref?IOW,如何设置子数组的return_value和zvals? …
显然,关闭和处置实际上是相同的.我希望能够关闭并打开我的ServiceHost实例,而无需每次都重新实例化它.有任何想法吗?谢谢.
我可以使用VBA创建一个新的ADODB.Connection和相关的ADODB.Command和ADOBD.Parameter,然后创建一个PivotCache和一个数据透视表
Sub CreatePivotTable()
'Declare variables
Dim objMyConn As ADODB.Connection
Dim objMyCmd As ADODB.Command
Dim objMyParam As ADODB.Parameter
Dim objMyRecordset As ADODB.Recordset
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
'Open Connection'
objMyConn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=myMIS;Data Source=localhost;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=WKSTN101;Use Encryption for Data=False;Tag with column collation when possible=False"
objMyConn.Open
'Set and Excecute SQL Command'
Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = "select a.col1, a.col2, b.col3, b.col4" & _
"from …Run Code Online (Sandbox Code Playgroud) <endpointBehaviors>
<behavior name="singleFileEndpointBehavior">
<wsdlExtensions singleFile="True" />
</behavior>
</endpointBehaviors>
Run Code Online (Sandbox Code Playgroud)
"wsdlExtensions"下方有一条蓝线表示错误.
The element 'behavior' has invalid child element 'wsdlExtensions' ...
有谁知道如何解决这一问题?
我知道这是如何保存记录的
<apex:commandButton action="{!save}" value="Save"/>
Run Code Online (Sandbox Code Playgroud)
我想要一个按钮不保存当前记录(即取消)并导航到保存记录列表(即该对象类型的对象列表).
像这样......
<apex:commandButton action="{!cancel}" value="Cancel"/>
Run Code Online (Sandbox Code Playgroud) 我正在实现一个解释器,我的解释器将支持的一个功能就像Delphi的Format.事实上,我正在使用我的函数SysUtils.Format.但是,我在构建函数的第二个参数时遇到了问题array of TVarRec.
假设我有以下代码.现在,我只假设解释代码需要访问哪些Delphi变量(iVar1和iVar2),但我仍然不知道如何将它们放入Format需要(arFormatArgs)的结构中.
type TFormatArgs = array of TVarRec;
procedure RunInterpretedFormatFunction;
var
iMyAge: integer;
iMyIQ: integer;
sCode: string;
sText: string;
begin
iMyAge := 5;
iMyIQ := -5;
sCode := 'Format(''My age is %d and my IQ is %d'', [iMyAge, iMyIQ])';
sText := FormatThis(sCode, iMyAge, iMyIQ);
end;
function FormatThis(sFormatCode: string; iVar1: integer; iVar2: integer): string;
var
sFormatString: string;
arFormatArgs: TFormatArgs;
begin
sFormatString := GetFormatString(sFormatCode); // I …Run Code Online (Sandbox Code Playgroud) 如何从现有WCF服务创建单个平面WSDL文件(没有来自内部的外部引用)?此WSDL将被使用(导入)为仅支持BasicHttpBinding的旧编程技术.请解答您对初学者的回答.
我是多线程的新手,但不是一个完整的新手.我需要在工作线程中执行对Web服务的调用.
在主线程中,我有一个表单(TForm),它有一个私有数据成员(私有字符串),只有工作线程才能写入(我在它恢复之前将指针传递给线程).当工作线程完成其webservice调用并将结果响应xml写入表单上的私有成员时,工作线程使用PostMessage将消息发送到表单的句柄(我在恢复之前也将其传递给线程).
interface
const WM_WEBSERVCALL_COMPLETE = WM_USER + 1;
type
TWebServiceResponseXML = string;
PWebServiceResponseXML = ^TWebServiceResponseXML;
TMyForm = class(TForm)
...
private
...
fWorkerThreadID: Cardinal;
fWebServiceResponseXML: TWebServiceResponseXML;
public
...
procedure StartWorkerThread;
procedure OnWebServiceCallComplete(var Message: TMessage); Message WM_WEBSERVCALL_COMPLETE;
end;
TMyThread = class(TThread)
private
protected
procedure Execute; override;
public
SenderHandle: HWnd;
RequestXML: string;
ResponseXML: string;
IMyService: IService;
PResponseXML: PWebServiceResponseXML;
end;
implementation
procedure TMyForm.StartWorkerThread;
var
MyWorkerThread: TMyThread;
begin
MyWorkerThread := TMyThread.Create(True);
MyWorkerThread.FreeOnTerminate := True;
MyWorkerThread.SenderHandle := self.Handle;
MyWorkerThread.RequestXML := ComposeRequestXML;
MyWorkerThread.PResponseXML := ^fWebServiceResponseXML;
MyWorkerThread.Resume; …Run Code Online (Sandbox Code Playgroud) 德尔福 7 问题。我正在使用具有许多数据绑定控件的表单(更改这不是一个选项)。我有一个 TDBEDIT 控件绑定到一个 TStringField(它有一个 EditMask 属性)。我知道我可以使用这个 EditMask 来强制控件验证它的输入,但是我想知道我是否可以直接用原始值填充该字段并让控件根据 EditMask 显示它?
我想用 16 位数字填充该字段,但我希望它显示为 4 个 4 位数字(即 9999 9999 9999 9999)。
如果我做 ...
dbedtABCNumber.DataSource.DataSet.Edit;
dbedtABCNumber.Field.Value := '1234567812345678';
Run Code Online (Sandbox Code Playgroud)
我只显示前 4 位数字。
我希望有人更熟悉旧数据绑定控件的内部结构。
我开发了一个在客户端服务器环境中使用Firebird 1.5.6数据库的Delphi 7应用程序.
该应用程序在笔记本电脑上的Windows 7 32位上运行,数据库在用作服务器的Windows XP 32位计算机上运行.问题是应用程序在闲置一段时间后会自行冻结.仅当我们在Windows 7上安装此问题时,才会在Windows XP上出现此问题.
一切都运行良好5年,但现在在Windows 7上应用程序完全不稳定.
有时唤醒时间是10-30秒,但成功但有时从不使用消息"应用程序无响应"或"应用程序崩溃".
我不知道在哪里搜索或尝试找到解决方案.我尝试制作一个10秒分辨率的计时器,使其一直处于活动状态,但没有成功.
BTW我在管理员模式下运行,XP兼容模式处于活动状态.我还没有尝试过虚拟XP模式,但我认为它无法解决问题.
delphi ×5
wcf ×3
apex-code ×1
c# ×1
delphi-2010 ×1
delphi-7 ×1
excel ×1
firebird ×1
firebird1.5 ×1
force.com ×1
php4delphi ×1
pivot-table ×1
salesforce ×1
servicehost ×1
soap ×1
vba ×1
visualforce ×1
windows-7 ×1
wsdl ×1