是否可以使用该RegisterExpectedMemoryLeak
过程注册接口?
我有一个私有字段声明为:
FDragDropTarget: IDropTarget;
Run Code Online (Sandbox Code Playgroud)
然后我创建一个这样的实例并尝试为此对象注册已知的内存泄漏:
FDragDropTarget := TDropTarget.Create(lcMain.Handle, FDragDrop);
RegisterExpectedMemoryLeak(FDragDropTarget);
Run Code Online (Sandbox Code Playgroud)
但是我得到一个编译错误,指出存在不兼容的类型:'Pointer'和'IDropTarget'.对我来说,我的界面实例无论如何都是一个指针?
我可以这样做吗?它是通过我的.dpr文件中的ReportMemoryLeaksOnShutdown:= True语句报告的.
begin
ReportMemoryLeaksOnShutdown := True;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
TDropTarget是我对IDropTarget接口的实现:
TDropTarget = class(TInterfacedObject, IDropTarget)
...
end;
Run Code Online (Sandbox Code Playgroud)
谢谢
鉴于此代码:
FN := 'c:\temp\test_file.log';
AFile := TFile.Open(FN, TFileMode.fmOpenOrCreate, TFileAccess.faReadWrite, TFileShare.fsRead);
try
with TFile.OpenRead(FN) do
try
finally
Free;
end;
finally
AFile.Free;
end;
Run Code Online (Sandbox Code Playgroud)
尝试在TFile.OpenRead(FN)行打开时出错:
使用:
with TFile.Open('c:\temp\test_file.log', TFileMode.fmOpen, TFileAccess.faRead, TFileShare.fsRead) do
try
finally
Free;
end;
Run Code Online (Sandbox Code Playgroud)
也导致相同的错误.同样如下:
FS := TFileStream.Create('c:\temp\test_file.log', fmOpenRead or fmShareDenyWrite);
try
finally
FS.Free;
end;
Run Code Online (Sandbox Code Playgroud)
但是,我可以愉快地在记事本中打开文件说(作为Readonly),或者如果我将初始TFileShare.fsRead更改为TFileShare.fsNone,我无法按预期打开它(在记事本中).
但是,如果我运行这个虚拟应用程序的两个实例,首先使用TFileShare.fsRead打开一个实例,我可以打开它.所以我无法在同一个应用程序中重新打开文件两次?似乎不对.
如果我最初打开文件:
FS := TFileStream.Create('c:\temp\test_file.log', fmOpenReadWrite or fmShareDenyWrite);
try
finally
FS.Free;
end;
Run Code Online (Sandbox Code Playgroud)
我可以使用上述方法(使用fsRead)第二次打开它.令人困惑的是逐步执行TFile.Open代码,它最终执行与上述TFileStream.Create完全相同的代码.
最后注意.如果我使用top(first)方式打开但是将其分配给"global"变量,则删除内部TFile.OpenRead(FN)调用,然后尝试通过另一个按钮单击打开文件说,错误仍然存在.这证明它与嵌套调用无关.
我试图在主视图中呈现局部视图.但是,我收到错误:
未找到部分视图"CompletedJobParts"或视图引擎不支持搜索的位置.〜/ Views/Jobs/CompletedJobParts.aspx~/Views/Jobs/CompletedJobParts.ascx~/Views/Shared/CompletedJobParts.aspx~/Views/Shared/CompletedJobParts.ascx~/Views/Jobs/CompletedJobParts.cshtml~/Views/Jobs /CompletedJobParts.vbhtml~/Views/Shared/CompletedJobParts.cshtml~/Views/Shared/CompletedJobParts.vbhtml
(抱歉格式化)...
我的观点的物理布局(位置)是查看/ MDT /工作/ CompletedJobParts.cshtml,我试图从在同一位置的观点把它(即查看/ MDT /职位/ Index.cshtml).我认为这可能是一个路由问题所以我输入:
routes.MapRoute(
"MDT",
"MDT/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
进入我的Global.asax.cs文件,但它似乎也没有在那里搜索(即,它正在搜索的位置没有MDT部分出现).
我在index.cshtml中使用它来渲染:
<div id="parts_div">
@{Html.RenderPartial("CompletedJobParts", Model);}
</div>
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能让我的View找到我的PartialView?
TIA
我在我的模型中发布一个带有列表的ajax调用时遇到了麻烦.
我的模型是:
public class MyListItem
{
public int Id { get; set; }
public string Value { get; set; }
}
public class MyModel
{
public int Integer { get; set; }
public string Str { get; set; }
public List<MyListItem> MyList { get; set; }
public MyModel()
{
Str = "Initial";
Integer = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我正在尝试将MyList的列表项显示为:
<div>
@{
if (Model.MyList != null)
{
int i = 0;
foreach (var item in Model.MyList)
{
<label>@item.Value</label>
@Html.Hidden("MyList[" + i + …
Run Code Online (Sandbox Code Playgroud)