如何获得目标可执行文件的名称IOTAProject?
如何确定二进制文件/ exe/dll/bpl/ocx/etc的文件名.由编译或构建生成?
- 对于Delphi 8或更高版本,请使用IOTAProjectOptions.TargetName.
- 对于早期版本,该方法实现起来要复杂得多,因为它涉及可能扫描$ E指令,该指令指定项目的可执行文件扩展名,然后在"OptputDir"指定的路径上查找二进制文件项目选项,或项目目录,如果该选项为空(在许多其他可能性和复杂性中).实现此类工具的最佳方法可能是从CodeGear CodeCentral样本ID 19823中的示例代码开始.
在我的情况下,我适合后者.给定一个IOTAProject接口,会有什么内容:
function GetTargetName(Project: IOTAProject): TFilename;
begin
//todo
end;
Run Code Online (Sandbox Code Playgroud)
如果它是Delphi 8或更高版本,(未经测试的)答案是:
{$I compilers.inc}
function GetTargetName(Project: IOTAProject): TFilename;
begin
{$IFDEF COMPILER_8_UP}
Result := Project.ProjectOptions.TargetName;
{$ELSE}
raise Exception.Create('Not yet implemented');
{$ENDIF}
end;
Run Code Online (Sandbox Code Playgroud)
但这是复杂的前Delphi 8更难.
Jedi JCL在内部有十几种方法TJclOTAExpert可以用来模拟:
Project.ProjectOptions.TargetName
Run Code Online (Sandbox Code Playgroud)
我将努力通过该代码.几个星期后,我希望能够回答我自己的问题.
但与此同时,我会打开它让其他人因能够回答我的问题而获得声誉.
我的Build菜单包含两个构建选项:
如果我选择Build Solution(然后是Debug,Start Debugging(F5)),正在运行的可执行文件不包含我的代码逻辑或视觉形式更改.
如果我选择Build MyProjectName(然后是Debug,Start Debugging(F5)),我的更改确实存在于可执行文件中.
这几乎就像生成解决方案并没有建立的解决方案,而是建立别的东西.
在Visual Studio 2010中," 构建解决方案 "是否构建了解决方案?
如何自定义" 生成"菜单,使其包含我想要的其他选项:

如何使用并行计算计算图像的直方图?串行图像的直方图很容易,但我不知道在并行计算它.
任何想法,算法,源代码或有用的链接将不胜感激.
我正在使用MPI.
INSERT INTO Foo(名称,值)VALUES(@ name,@ value)
在SQL Server中,Name列是一种varchar类型.这个Value专栏是一个nvarchar(max).
什么尺寸做我创建参数时,我不知道,还是要指定,大小的时候通过?
procedure SaveTheThing(Connection: TADOConnection);
var
sql: WideString;
cmd: _Command;
begin
sql := 'INSERT INTO Foo (Name, Value) VALUES(@name, @value)';
cmd := CoCommand.Create;
cmd.Set_ActiveConnection(Connection.ConnectionObject);
cmd.Set_CommandType(adCmdText);
cmd.Set_CommandText(sql);
//and now add the parameters
cmd.Parameters.Append(
cmd.CreateParameter('@name', adVarChar, adParamInput, -1, filename)
);
cmd.Parameters.Append(
cmd.CreateParameter('@value', adVarWChar, adParamInput, -1, GetXmlToWideString)
);
cmd.Execute({out}recordsAffected, EmptyParam, adCmdSomeThatDoesntCauseAnExcetpion or adExecuteNoRecords);
end;
Run Code Online (Sandbox Code Playgroud)
简单的替代方案是:
sql := 'INSERT INTO Foo (Name, Value)'#13#10+ …Run Code Online (Sandbox Code Playgroud) 如何确定ROWGUIDCOLSQL Server 2000表中列的名称?
我试过看syscolumns,例如:
SELECT *
FROM syscolumns
WHERE id = OBJECT_ID('Currencies')
Run Code Online (Sandbox Code Playgroud)
但那里什么也没有,或者在MSDN页面上看起来像rowguidcol.
在SQL Server 2005中,您只需查询sys.columns,例如:
SELECT *
FROM sys.columns
WHERE object_id = OBJECT_ID('Currencies')
AND is_rowguidcol = 1
Run Code Online (Sandbox Code Playgroud)
容易狡猾.
我正在使用Microsoft的WinHttpRequestCOM对象来请求具有无效证书的网页:
IWinHttpRequest http = new WinHttpRequest();
http.Open("GET", url, false);
http.Send(null);
Run Code Online (Sandbox Code Playgroud)
除了调用Send抛出异常外:
0x80072F0D - The certificate authority is invalid or incorrect
Run Code Online (Sandbox Code Playgroud)
我怎么说WinHttpRequest我不在乎,我想要它检索我要求的页面?
如何使用Microsoft Crypto API 中的“证书”加密数据?
我知道如何使用 AES 加密通过 Microsoft Crypto API 加密数据:
keyBlob.hdr.bType := PLAINTEXTKEYBLOB;
keyBlob.hdr.bVersion := CUR_BLOB_VERSION;
keyBlob.hdr.reserved := 0;
keyBlob.hdr.aiKeyAlg := CALG_AES_128;
keyBlob.cbKeySize := 16;
Move(data[0], keyBlob.key[0], 16);
/*
Set ProviderName to either
providerName = "Microsoft Enhanced RSA and AES Cryptographic Provider"
providerName = "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)" //Windows XP and earlier
*/
MS_ENH_RSA_AES_PROV_W: WideString = 'Microsoft Enhanced RSA and AES Cryptographic Provider';
providerName := MS_ENH_RSA_AES_PROV_W;
CryptAcquireContextW(provider, nil, PWideChar(providerName), PROV_RSA_AES, CRYPT_VERIFYCONTEXT);
CryptImportKey(provider, PByte(@keyBlob), …Run Code Online (Sandbox Code Playgroud) 我想在C#中有一个索引属性:
public Boolean IsSelected[Guid personGuid]
{
get {
Person person = GetPersonByGuid(personGuid);
return person.IsSelected;
}
set {
Person person = GetPersonByGuid(personGuid);
person.IsSelected = value;
}
}
public Boolean IsApproved[Guid personGuid]
{
get {
Person person = GetPersonByGuid(personGuid);
return person.IsApproved;
}
set {
Person person = GetPersonByGuid(personGuid);
person.IsApproved= value;
}
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio抱怨非整数索引器语法:
我知道.NET支持非整数索引器.
在另一种语言中,我会写:
private
function GetIsSelected(ApproverGUID: TGUID): Boolean;
procedure SetIsSelected(ApproverGUID: TGUID; Value: Boolean);
function GetIsApproved(ApproverGUID: TGUID): Boolean;
procedure SetIsApproved(ApproverGUID: TGUID; Value: Boolean);
public
property IsSelected[ApproverGuid: TGUID]:Boolean read …Run Code Online (Sandbox Code Playgroud) 我们假设我正在将数据写入文件句柄:
hFile = CreateFile(filename, GENERICREAD | GENERICWRITE, 0, null, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
//[snip error check]
try
{
if (!WriteFile(hFile, buffer, count, ref bytesWritten, null))
throw new Win32Exception(GetLastError());
}
finally
{
CloseHandle();
}
Run Code Online (Sandbox Code Playgroud)
如果我的数据写入失败,我希望在关闭句柄时删除该文件.即:我希望文件是"un-CreatFile'd".
我已经尝试了显而易见的,如果出现问题则删除文件:
hFile = CreateFile(filename, GENERICREAD | GENERICWRITE, 0, null, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
//[snip error check]
try
{
try
{
if (!WriteFile(hFile, buffer, count, ref bytesWritten, null))
throw new Win32Exception(GetLastError());
}
finally
{
CloseHandle();
}
}
catch
{
DeleteFile(filename);
throw;
}
Run Code Online (Sandbox Code Playgroud)
这种方法存在两个问题:
我正在尝试将项目从D6移动到D-XE3.使用VirtualStringTree版本5.10在OnSaveNode和OnLoadEvents中保存和加载树数据时,我得到了垃圾.我可能没有正确处理Unicode,但我可能还有其他一些无知:
procedure TfMain.vstGridSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream);
var
Data: PStkData;
begin
Data := Sender.GetNodeData(Node);
// Owned: boolean;
Stream.Write(Data.Owned, SizeOf(boolean) );
// Symbol: string;
Stream.Write(PChar(Data.Symbol)^, Length(Data.Symbol) * SizeOf(Char));
// AvgTarget: currency;
//Stream.Write(Data.AvgTarget, SizeOf(currency));
// PE: double;
Stream.Write(Data.PE, SizeOf(double));
end;
procedure TfMain.vstGridLoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream);
var
Data: PStkData;
begin
Data := Sender.GetNodeData(Node);
//Owned: boolean;
Stream.Read(Data.Owned, SizeOf(boolean));
//Symbol: string;
Stream.Read(PChar(Data.Symbol)^, Length(Data.Symbol) * SizeOf(Char));
//AvgTarget: currency;
Stream.Read(Data.AvgTarget, SizeOf(currency));
//PE: double;
Stream.Read(Data.PE, SizeOf(double));
end;
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
delphi unicode virtualtreeview tvirtualstringtree delphi-xe3
delphi ×3
winapi ×2
ado ×1
build ×1
c# ×1
certificate ×1
cryptoapi ×1
delphi-5 ×1
delphi-xe3 ×1
file-io ×1
mpi ×1
opentools ×1
properties ×1
sql-server ×1
unicode ×1
winhttp ×1