我设法提炼了我的问题中的根本问题之一如何跟踪下面单元中的OLE自动化对象的_AddRef/_Release调用.
我也会回答这个问题,以防其他人碰到这个问题.
问题:使用下面的代码,为什么WINWORD.EXE不会一直退出(有时它会退出).
该装置可能会被削减甚至更多.
unit Unit2;
interface
uses
Winapi.Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls,
WordXP;
type
TForm2 = class(TForm)
WordXPFailsToQuitButton: TButton;
procedure WordXPFailsToQuitButtonClick(Sender: TObject);
private
FWordApplication: TWordApplication;
strict protected
function GetWordApplication: TWordApplication; virtual;
function GetWordApplication_Documents: Documents; virtual;
procedure WordApplication_DocumentBeforeClose(ASender: TObject; const Doc: _Document; var Cancel: WordBool); virtual;
procedure WordApplication_Quit(Sender: TObject); virtual;
property WordApplication: TWordApplication read GetWordApplication;
property WordApplication_Documents: Documents read GetWordApplication_Documents;
end;
var
Form2: TForm2;
implementation
uses
Vcl.OleServer;
{$R *.dfm}
function TForm2.GetWordApplication: …Run Code Online (Sandbox Code Playgroud) 我知道您无法完全描述具有XSD架构的TClientDataSet的XML,因为ROW元素具有名称随内容而变化的属性.
但是,这种XML的METADATA部分应该是.
所以:有具有(部分)的XSD描述了可以用Delphi TClientDataSets被保存在XML的元数据部分的人?
问候.
PS:
感谢指向XML-> XSD转换工具/站点; 我本来应该写的,我自己也这样做了,但是以适当的方式生成XSD(即涵盖所有可能性的那个)将需要输入XML,涵盖所有可能性(如往返,rowstate等).我会尝试以这种方式提出一个像样的XSD并在此发布.
是否有可能在Delphi中取消这些名称?如果是这样,我在哪里可以获得更多信息?
它无法在dbrtl100.bpl中找到某个条目的错误消息示例我想知道它找不到哪个确切的函数(单位,类,名称,参数等).
---------------------------
myApp.exe - Entry Point Not Found
---------------------------
The procedure entry point @Dbcommon@GetTableNameFromSQLEx$qqrx17System@WideString25Dbcommon@IDENTIFIEROption could not be located in the dynamic link library dbrtl100.bpl.
---------------------------
OK
---------------------------
Run Code Online (Sandbox Code Playgroud)
我知道它是Dbcommon单元中的GetTableNameFromSQLEx方法(我有Delphi和RTL/VCL源代码),但有时我会遇到并非所有代码都可用的应用程序(是的,客户应该总是购买第三方的所有源代码)东西,但有时他们没有).
但是说这是一个我没有代码的例子,或只有接口文件(BDE.INT任何人?)它有什么参数(即哪个潜在的重载)?它有什么回报类型?
对于任何Delphi版本,这种破坏是否相同?
--jeroen
编辑1:
感谢Rob Kennedy:tdump -e dbrtl100.bpl可以解决问题.根本不需要-um:
C:\WINDOWS\system32>tdump -e dbrtl100.bpl | grep GetTableNameFromSQLEx
File STDIN:
00026050 1385 04AC __fastcall Dbcommon::GetTableNameFromSQLEx(const System::WideString, Dbcommon::IDENTIFIEROption)
Run Code Online (Sandbox Code Playgroud)
编辑2:
感谢TOndrej发现了这篇德语EDN文章(英文谷歌翻译).那篇文章非常准确地描述了格式,应该可以创建一些Delphi代码来解决这个问题.
Pitty,作者提到的网站(和电子邮件)现在已经死了,但很高兴知道这些信息.
--jeroen
我在.bpl中有一个单元,我需要一个我写的新函数的字符串列表.我希望stringlist在应用程序的生命周期内保持不变,这样每个调用都可以建立在之前调用的内容之上.
所以它在单元内全局声明,我在Initialization部分初始化它,如下所示:
var
ProductLookup : TStrings;
...
function foo : boolean;
begin
result := (ProductLookup.IndexOfName('bar') >=0); //blow up here. It's nil. Why?
end;
....
initialization
ProductLookup := TStringList.Create; // This should get run, but doesn't.
finalization
FreeAndNil(ProductLookup);
end.
Run Code Online (Sandbox Code Playgroud)
当我对它进行单元测试时,一切都很好.但是当它从主应用程序运行时,由于字符串列表为零而导致访问冲突.所以现在我在foo函数中检查nil并在必要时创建.但我不知道为什么初始化对我不起作用.我在初始化中放了一个调试消息,当它作为BPL加载时它不会运行,但如果我直接编译到我的dUnit exe中,它会运行.有任何想法吗?Delphi2005.
从非ASP.NET应用程序使用SharePoint DLL(仅限x86)时,可以将"平台目标"设置为x86(而不是"任何CPU"),以便Visual Studio 2010和应用程序加载SharePoint程序集.
但是,在x64开发系统上开发ASP.NET应用程序时,在构建Web站点时会收到这个可怕的错误消息:
无法加载文件或程序集"Microsoft.SharePoint.Search"或其依赖项之一.尝试加载格式不正确的程序.
这是因为在Visual Studio 2010中构建时,默认情况下ASP.NET是"任何CPU".
我怎么能改变呢?
我尝试了网站的属性页面,web.config,但无济于事.
注意:这是针对开发系统的.我知道对于服务器系统,我可以通过在"应用程序池默认值"中将"启用32位应用程序"设置为"True"来更改应用程序池以强制加载32位x86.
简介:如何在Delphi Soap Server应用程序中访问原始的TWebRequest对象?
我的Web服务ITest使用以下方法发布服务CallMe:
ITest = interface(IInvokable)
['{AA226176-FFAD-488F-8768-99E706450F31}']
function CallMe: string; stdcall;
end;
...
initialization
InvRegistry.RegisterInterface(TypeInfo(ITest));
Run Code Online (Sandbox Code Playgroud)
该接口在类中实现:
TTest = class(TInvokableClass, ITest)
public
function CallMe: string; stdcall;
end;
...
initialization
InvRegistry.RegisterInvokableClass(TTest, TestFactory);
Run Code Online (Sandbox Code Playgroud)
如何访问TWebRequest此方法实现中的原始对象?例如,如果我想检查设置了哪些cookie,或者在请求中读取其他属性:
function TTest.CallMe: string;
begin
// how to access TWebRequest object
...
end;
Run Code Online (Sandbox Code Playgroud) 由于不小心使用Delphi接口,我的应用程序中有另一个错误.当我将接口传递给忽略该参数的过程时,实例永远不会被释放.请参阅以下简单示例:
ITest = interface
procedure Test;
end;
Tester = class(TInterfacedObject, ITest)
public
procedure Test;
end;
Base = class
public
procedure UseTestOrNot(test : ITest); virtual; abstract;
end;
A = class(Base)
public
procedure UseTestOrNot(test : ITest); override;
end;
B = class(Base)
public
procedure UseTestOrNot(test : ITest); override;
end;
{ A }
procedure A.UseTestOrNot(test: ITest);
begin
test.Test();
end;
{ B }
procedure B.UseTestOrNot(test: ITest);
begin
WriteLn('No test here');
end;
// -------- Test ---------------------------------------
var
list : TObjectList<Base>;
x : Base;
t : ITest; …Run Code Online (Sandbox Code Playgroud) 只是为了确保我没有忽略一个奇怪的边缘情况,因为我发现了一个产生它的情况,但我想确保:
是否有任何Delphi版本可以发出包含类型tkUnknown为TTypeKind的 RTTI ?
如果是这样:
在当前的Delphi XE5 RTL,我能找到处理的唯一地方tkUnknown是TValue,但我还没有发现在RTL,设置了一个代码路径TValue包含所属类别有tkUnknown作为类.
我想知道该xercesxmldom单元作为XML DOM实现之一发生了什么.
它似乎在Delphi XE中消失了.
为什么?
(我搜索了文档;找不到关于xercesxmldom消失的任何相关信息).
编辑:这些是我存档的来源:
R:\>dir /s /b xercesxmldom.pas
R:\D2006-Enterprise-D10-BDS-4.0\source\Win32\xml\xercesxmldom.pas
R:\D2007-Enterprise-D11-RadStudio-5.0\source\Win32\xml\xercesxmldom.pas
R:\D2009-Enterprise-D12-RadStudio-6.0\source\Win32\xml\xercesxmldom.pas
R:\D2010-Enterprise-D14-RadStudio-7.0\source\Win32\xml\xercesxmldom.pas
R:\D7.01.Architect\Source\Xml\xercesxmldom.pas
Run Code Online (Sandbox Code Playgroud)
R:\DXE-Enterprise-D15-RadStudio-8.0源树中没有任何内容......
--jeroen
记录时,总是会纠缠于字符串文字中.
我解决了很好的性能,通过传递一个字段和变量Expression<Func<T>> expression(如解释在这里),所以你可以做这样的事情:
public void Demo(string someArgument)
{
LogFrameWork.LogLine("Demo"); // goal is to get rid of these string literals
LogFramework.Log(() => someArgument);
}
Run Code Online (Sandbox Code Playgroud)
我想为方法Demo本身做类似的事情:
public void Demo(string someArgument)
{
LogFramework.Log(this.Demo);
}
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事情:
public static void Log(Delegate method)
{
string methodName = method.Method.Name;
LogLine(methodName);
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
public static void Log(Action method)
{
string methodName = method.Method.Name;
LogLine(methodName);
}
Run Code Online (Sandbox Code Playgroud)
但我得到这样的编译器错误:
Argument 1: cannot convert from 'method group' to 'System.Delegate'
Argument 1: cannot convert from 'method group' …Run Code Online (Sandbox Code Playgroud) delphi ×8
.net-3.5 ×1
asp.net ×1
bpl ×1
c# ×1
delphi-2005 ×1
delphi-2010 ×1
delphi-xe ×1
delphi-xe2 ×1
interface ×1
methods ×1
ole ×1
parameters ×1
rtti ×1
soap ×1
web-services ×1
xerces ×1
xml ×1
xmldom ×1
xsd ×1