我想创建一个通用函数。我是通用的新手。我有 3 个不同类型的私人列表。我想要一个公共通用方法来返回列表中的 1 项。
我有下面的代码。(我已经简化了)
TFilter = class
private
FListFilter : TObjectList<TFilterEntity>;
FListFilterDate : TObjectList<TFilterDate>;
FListFilterRensParam : TObjectList<TFilterRensParam>;
public
function yGetFilter<T>(iIndice : integer) : T;
....
function TFilter .yGetFilter<T>(iIndice : integer) : T;
begin
if T = TFilterEntity then
result := T(FListFilter.Items[iIndice])
else
....
end;
Run Code Online (Sandbox Code Playgroud)
我知道该代码无法运行,但是您能告诉我是否可以执行该操作吗?
我在C#中使用VSTO。当我单击按钮时,我将附件保存在文件夹中。我的问题是:当我在签名中带有图像的丰富电子邮件时,附件中就有一个元素。但我不想保存该图像。Outlook(应用程序)将此附件隐藏在区域附件中!那么为什么不我:-(
我的代码非常简单:
MailItem MailItemSelected = this.OutlookItem;
foreach (Attachment a in MailItemSelected.Attachments)
{
a.SaveAsFile(path + a.FileName);
}
Run Code Online (Sandbox Code Playgroud)
但是我没有找到不保存签名图像的测试。
我尝试将资源文件包含在我的包中。当我构建包时,我读到了这个警告:
[dcc32 Conseil] H2161 Warning: Duplicate resource: Type 10 (RCDATA), ID PLUSUTILISEVOIR; File Project.dres resource kept; file Project.dres resource discarded.
Run Code Online (Sandbox Code Playgroud)
在我的单位中,我写道:...
结束;
{$R Project.dres}
implementation
...
Button.Picture.LoadFromResourceName(HInstance, 'Image1');
...
Run Code Online (Sandbox Code Playgroud)
资源加载良好,但为什么我有警告?
我从事与许多其他小型图书馆互动的Delphi项目.我使用FastMM4,我想使用传递给dll参数的复杂类.
所以例如,我将表单发送到我的dll.进入dll我用操作符"IS"测试参数的类型.
但进入Dll后,运算符"IS"总是返回"false"
为例
library Dll;
uses
FastMM4,
System.SysUtils,
System.Classes,
Vcl.Dialogs,
Vcl.Forms;
{$R *.res}
procedure Complex(L : TObject);stdcall;
begin
if L is TForm then
showmessage('Ok')
else
showmessage('Pas ok') ;
if L is TCustomFrame then
showmessage('Ok')
else
showmessage('Pas ok')
end;
exports
Complex;
begin
end.
Run Code Online (Sandbox Code Playgroud)
和电话
procedure TffsIsOperator.Button2Click(Sender: TObject);
var
MaDLL : THandle;
Proc : procedure (l : TObject);
begin
try
MaDLL := LoadLibrary(PChar('Dll.dll'));
@Proc := GetProcAddress(MaDLL, 'Complex');
Proc(self);
finally
FreeLibrary(MaDLL);
end;
end;
Run Code Online (Sandbox Code Playgroud) 我在Delphi XE6上,我搜索创建JSON和解析JSON的最佳方法.
我尝试使用REST.Json单元和这个方法:TJson.ObjectToJsonString
TContrat = class
private
FdDateDeb: TDate;
public
property dDateDeb: TDate read FdDateDeb write FdDateDeb;
end;
TApprenant = class
private
FsNom : string;
[JSONName('ListContrat')]
FListContrat: TObjectList<TContrat>;
public
property sNom : string read FsNom write FsNom;
property ListContrat: TObjectList<TContrat> read FListContrat write FListContrat;
end;
...
procedure TForm3.Button2Click(Sender: TObject);
var
apprenant : TApprenant;
contrat : TContrat;
begin
Memo1.Clear;
apprenant := TApprenant.Create;
apprenant.sNom := 'JEAN';
contrat := TContrat.Create;
contrat.dDateDeb := StrToDate('01/01/2015');
apprenant.ListContrat.Add(contrat);
contrat := TContrat.Create;
contrat.dDateDeb := StrToDate('01/01/2016');
apprenant.ListContrat.Add(contrat);
Memo1.Lines.Add(TJson.ObjectToJsonString(apprenant));
end; …Run Code Online (Sandbox Code Playgroud) 当我在没有运行时包的情况下执行此代码时,出现 32 代码错误,这是正确的。但是当我激活运行时包(例如仅使用“FireDACASADriver;YmagControlDB”)时,错误代码始终为“0”
procedure TForm1.Button1Click(Sender: TObject);
Var
Stream: TStream;
iError : integer;
begin
Stream := nil;
iError := -1;
try
try
Stream := TFileStream.Create('d:\toto.docx', fmOpenRead);
except
begin
iError := GetLastError;
end;
end;
finally
if Assigned(Stream) then
Stream.Free;
end;
showmessage('Erreur : ' + inttostr(iError));
end;
Run Code Online (Sandbox Code Playgroud)
如何使用运行时包修复 GetLastError?
delphi ×5
delphi-xe6 ×3
attachment ×1
c# ×1
dll ×1
fastmm ×1
function ×1
generics ×1
getlasterror ×1
json ×1
package ×1
vsto ×1
winapi ×1