小编Ian*_*oyd的帖子

Delphi OpenTools API:如何获取目标exe名称?

如何获得目标可执行文件的名称IOTAProject

来自GExpert的OpenTools API FAQ:

如何确定二进制文件/ 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)

我将努力通过该代码.几个星期后,我希望能够回答我自己的问题.

但与此同时,我会打开它让其他人因能够回答我的问题而获得声誉.

delphi delphi-5 opentools

2
推荐指数
1
解决办法
1744
查看次数

VS2010:"构建解决方案"是否构建了解决方案?

我的Build菜单包含两个构建选项:

  • 构建解决方案
  • 构建MyProjectName

在此输入图像描述

如果我选择Build Solution(然后是Debug,Start Debugging(F5)),正在运行的可执行文件不包含我的代码逻辑或视觉形式更改.

如果我选择Build MyProjectName(然后是Debug,Start Debugging(F5)),我的更改确实存在于可执行文件中.

这几乎就像生成解决方案并没有建立解决方案,而是建立别的东西.

在Visual Studio 2010中," 构建解决方案 "是否构建了解决方案?


奖金问题

如何自定义" 生成"菜单,使其包含我想要的其他选项:

在此输入图像描述

build visual-studio-2010 visual-studio

2
推荐指数
1
解决办法
2298
查看次数

并行计算图像的直方图

如何使用并行计算计算图像的直方图?串行图像的直方图很容易,但我不知道在并行计算它.

任何想法,算法,源代码或有用的链接将不胜感激.

我正在使用MPI.

parallel-processing image-processing mpi

2
推荐指数
1
解决办法
1915
查看次数

就ADO而言,nvarchar(max)有多大?

我正在尝试对ADO使用参数化查询:

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)

delphi ado parameterized-query

2
推荐指数
1
解决办法
2750
查看次数

如何在SQL Server 2000表中获取ROWGUIDCOL?

如何确定ROWGUIDCOLSQL Server 2000表中列的名称?

我试过看syscolumns,例如:

SELECT *
FROM syscolumns
WHERE id = OBJECT_ID('Currencies')
Run Code Online (Sandbox Code Playgroud)

但那里什么也没有,或者在MSDN页面上看起来像rowguidcol.


在SQL Server 2005中很容易

在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)

容易狡猾.

sql-server sql-server-2000 uniqueidentifier

2
推荐指数
1
解决办法
1228
查看次数

如何使用IWinHttpRequest忽略无效证书?

我正在使用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我不在乎,我想要它检索我要求的页面?

winapi winhttp

2
推荐指数
1
解决办法
9366
查看次数

如何使用证书加密数据?

如何使用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)

certificate cryptoapi public-key-encryption

2
推荐指数
1
解决办法
1663
查看次数

C#中的非整数索引索引器属性

我想在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)

c# properties indexed-properties

2
推荐指数
2
解决办法
640
查看次数

如何取消创建文件

我们假设我正在将数据写入文件句柄:

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)

这种方法存在两个问题:

  1. 有一个竞争条件,有人可以在关闭它之后打开我的文件,但在我删除它之前
  2. 我可能有权 …

error-handling file-io winapi

2
推荐指数
2
解决办法
599
查看次数

保存VirtualStringTree节点数据

我正在尝试将项目从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

2
推荐指数
1
解决办法
637
查看次数