小编War*_* P的帖子

Delphi soap https身份验证失败会弹出一个对话框

我们有一个使用SOAP(THTTPRIO等)通信的delphi XE应用程序,默认情况下(在delphi中)通过WinInet.dll工作.我们使用https身份验证修复了身份验证代码以使其正常工作,并且当https的用户名和密码正确时,一切都很好.

问题是,当身份验证详细信息不正确时,您会从Windows获得一个消息框,这可能是由WinInet.dll本身弹出的.我想让那个对话框消失.我无法弄清楚如何更改我的Delphi SOAP,因此密码不会出现.

情况与以下方面的问题不同:

  1. 我正在做他正在做的所有事情,包括调用InternetSetOption(...)来设置用户名和密码.

  2. 我没有使用带有自签名证书的服务器,所以soIgnoreInvalidCerts标志不适用于我的情况.

  3. 不知何故,我想我需要在WinInet中获得一些API调用,告诉它不要弹出InternetErrorDlg它有弹出来询问用户的(有些版本的Windows说Windows安全选项).

  4. 在我的情况下,我们在配置文件中使用的用户名和密码正在使用,它是错误的(过时),因此我们希望WinInet代码只返回错误而不是弹出对话框.

也许这个家伙真正做到的另一个问题是如何做到这一点,但这个问题的细节不足以看出他是如何做到的.接受的答案对我不起作用.

我遵循的一些死胡同:

WinInet MSDN文档PLUGIN_AUTH_FLAGS_CAN_HANDLE_UI- 似乎不适用于WinInet用户,而是适用于插件.

WinInet MSDN文档讨论了InternetSetOption,一些新闻组引导我进入以下on-before-post事件处理程序代码:

procedure TMyDevice.HTTPWebNodeOnBeforePost(
  const HTTPReqResp: SOAPHTTPTrans.THTTPReqResp; Data: Pointer);
var
 SecurityFlagsLen:DWORD;
 SecurityFlags:DWORD;
begin
  { authentication, NTLM+HTTPS, WinInet authentication set via WinInet SET INTERNET OPTION API.
    This approach recommended on newsgroups for https basic authentication.  }

    if fUserName<>'' then
   if not InternetSetOption(Data,
               INTERNET_OPTION_USERNAME,
               PChar(fUserName),
               Length(fUserName)) then
     raise EWebServiceAuthException.Create(SysErrorMessage(Windows.GetLastError));

   if fPassword<>'' then
  if not InternetSetOption(Data,
               INTERNET_OPTION_PASSWORD,
               PChar(fPassword),
               Length (fPassword)) then
     raise EWebServiceAuthException.Create(SysErrorMessage(Windows.GetLastError)); …
Run Code Online (Sandbox Code Playgroud)

delphi soap wininet

7
推荐指数
1
解决办法
3277
查看次数

使用Delphi Open Tools API将自己的项添加到Delphi IDE Insight(F6)

我想用INTAIDEINsightService或许AddItemAddActionList添加到在Delphi的IDE洞察力功能的条目.

根据Delphi OTA wiki, INTAIDEINsightService 允许您注册自己的操作.我能找到的唯一参考就是这里,它提到了API的名称,并且它存在.Delphi中没有任何关于它的帮助.ToolsAPI.pasDelphi XE中的单元在此界面中显示了两个方法,可用于注册操作:

function AddActionList(  Actions: TCustomActionList; ... ): Integer;
procedure RemoveActionList(const Index: Integer);
Run Code Online (Sandbox Code Playgroud)

注释说"项目将显示为[描述|]类别| TCustomAction.Caption.不会显示未指定类别的包含操作.".

我无法使用操作找到任何其他文档或示例.一个简单的"hello world"示例,其中一个动作,或者只是一个项目,在描述或类别"helloworld"中注册,然后可以搜索并在您点击F6时显示,这将是完美的,但是动作是首选.

看起来这样的向导必须实现INTAIDEInsightItem才能在IDE洞察中呈现自己,但我不确定这是否是"必需"的hello-world样本.我不确定你是否必须使用动作,或者常规的"项目"添加是否足够.

(我的最终目标是创建一个新的gExperts风格的专家"通过使用IDE洞察力按名称搜索我的库路径中的任何单元"但我会首先将一个项目的名称添加到ide一个项目中.)

delphi toolsapi delphi-xe

7
推荐指数
1
解决办法
618
查看次数

如何在Delphi XE3中的Firemonkey FM2应用程序中设置非客户区域的样式

我之前在Delphi XE2时间框架中问过这个问题,然后答案是一个非常丑陋的黑客.

根据官方发布的说明,现在Delphi XE3支持非客户端主题.你如何在Firemonkey FM2中的Delphi XE3中做到这一点?

我认为它必须与风格书有关,但我无法弄明白.表单本身有一个"EnableBorderStyling"属性,我设置为true,我想我必须加载包含一些非客户主题数据的样式,但我找不到包含它的样式.

帮助与此主题无关​​.

Update2好吧,它没有被破坏,只是因为我没有包含这个样式元素的样式(正如RRUZ所说).

procedure TForm1.FormShow(Sender: TObject);
begin
  StyleBook := StyleBook1;
  WindowBorder.UpdateStyle;
end;
Run Code Online (Sandbox Code Playgroud)

Update3:样式文件似乎位于两个不同的位置,这令人困惑:

  C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Redist\styles\Fmx        
  C:\Users\Public\Documents\RAD Studio\10.0\Styles
Run Code Online (Sandbox Code Playgroud)

请注意,我在任一点上都没有Luna.Style(firemonkey样式),但使用样式编辑器工具只需5秒.(打开,另存为,并将类型更改为.Style,我有一个!)

UPDATE4:RRUZ的答复工作,但我的系统(Windows 8 RTM)的非客户端的风格不看的权利,他们周围的地区白角on't完全绘制.调整窗口大小使它消失,我很清楚我应该能够强制使用WM_NCREPAINT或其他东西,然后让它消失.

delphi firemonkey delphi-xe3

7
推荐指数
1
解决办法
2411
查看次数

Delphi 2007:如何设置TSAWARE?

在Delphi 2009及更高版本中,您可以将此行添加到项目.dpr中,以在应用程序可执行文件中设置TSAWARE PE标志:

{$SetPEOptFlags  IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
Run Code Online (Sandbox Code Playgroud)

我认为(错误地)Delphi 2007不支持这种语法.我有一个应用程序,我无法从2007年移植到更新的Delphi版本(任务正在进行中,但未来几个月内不会完成) .

更新它只是必须将Windows添加到项目.dpr中.

delphi delphi-2007 terminal-services

7
推荐指数
1
解决办法
1637
查看次数

Delphi中对RC文件的依赖性检查

如果修改了RC文件,Delphi将再次编译它.如果RC文件具有引用已更改文件的RCDATA或BITMAP声明,则Delphi不会再次将.RC文件重新编译为.RES,直到通过删除.RES文件或执行"触摸"(修改文件时间戳)强制它为止在顶级.RC文件.

这是TEST.RC文件的示例:

SAMPLE   RCDATA "File.txt"
Run Code Online (Sandbox Code Playgroud)

当修改TEST.RC时,这将导致重新编译,当"File.txt"被修改时,但是Delphi不会在"编译"上重新编译资源.我不愿意只使用"Build",因为它将我的时间从几秒钟增加到几分钟.

有没有人让Delphi与.RC文本文件和依赖项一起正常工作?虽然有些人添加资源而从不更改它们,但我已经开始使用.RC文件来处理我可能经常更改的内容,例如.RC文件中RCDATA部分中的二进制或文本数据.

请注意,尝试在预构建或后构建中放置"删除.res"步骤似乎打破了Delphi IDE /编译器.我可以在IDE外部进行外部排序(在运行msbuild之前总是删除某些.res文件),但在IDE中,Delphi并没有给我太多选择.

有没有人有解决方案?(我在Delphi 2007中遇到了这个问题,但是任何适用于任何版本的Delphi从2007到XE3的解决方案都是受欢迎的.)

delphi delphi-ide

7
推荐指数
1
解决办法
1157
查看次数

如果框架列表为空,如何将XCode 4中的Core Foundation框架添加到裸命令行工具?

我使用XCode 4.5创建了一个新的命令行工具(创建Mac OS X命令行应用程序的方法),但我现在想要为它添加一个框架.构建阶段中的框架列表为空.

我可以添加.h/.m目标C类头和我编写的实现文件,但我不知道如何将"命令行工具"变成旧的XCode可能有不同的模板; 可以访问Core Foundation框架的命令行应用程序(不是Cocoa应用程序),或者我选择添加到其中的任何其他框架.

此外,XCode 3中曾经有一个" 核心基础工具 "选项,现在在哪里?

(更新:我在Target Dependencies中单击了"+",这看起来很合理,但是它只给我一个空的列表添加.我想在其他地方必须有一些东西你必须改变才能让东西显示在Target Dependencies中如果我可以说,新用户并不完全清楚.因此,这个公共服务信息,问题和答案.嘿Apple,你如何将其改为"链接库或框架",以便框架框架出现在那里.让我们猜测,当我们所知道的唯一一个词是Framework时,我们是在添加一个库还是一个依赖,这让人感到困惑.)

xcode frameworks command-line-tool xcode4

7
推荐指数
1
解决办法
9472
查看次数

如何返回可以转换为存储在boost :: interprocess映射中的值元素的不透明句柄(void*或dword)?

我对将std::string密钥和大struct值放入容器之类所涉及的堆和按值与引用语义有点混淆boost::interprocess::map.

这是我的情况,以及我正在使用的一些typedef:

typedef std::string     AreaKeyType;     
typedef DATA_AREA_DESC          AreaMappedType; // DATA_AREA_DESC is a big struct.
typedef std::pair<const AreaKeyType, AreaMappedType> AreaValueType;
typedef boost::interprocess::allocator<AreaValueType, boost::interprocess::managed_shared_memory::segment_manager> AreaShmemAllocator;
typedef boost::interprocess::map<AreaKeyType, AreaMappedType, std::less<AreaKeyType>, AreaShmemAllocator> AreaMap;
Run Code Online (Sandbox Code Playgroud)

这是我如何插入AreaValueType(这是std :: pair的typedef):

 AreaValueType A(areaKey, arearec);
 anAreaMap->insert(A); 
Run Code Online (Sandbox Code Playgroud)

我相信上面的代码将我在本地(非共享内存)堆栈上的std :: pair复制到共享内存区域.我可以在boost :: interprocess :: map中获取该共享内存区域的句柄,还是仅限于将该记录整回并整个存储?(换句话说,我可以将类似结构的东西存储到boost进程间映射中,然后更新该记录中的单个字节,或者我必须通过替换DATA_AREA_DESC结构中的所有字节来更新整个记录,全新字节).

进一步澄清:

  1. 我有一个普通的旧ANSI C DLL导出api,内部使用C++和Boost :: interprocess :: map.该函数应该在地图中创建一个项目,然后返回一个句柄.如何在boost :: interprocess :: map中插入一些东西,然后将一个句柄返回给非C++用户,最好是强制转换为void*或者unsigned long?我所能做的就是通过查找std :: string键值从共享内存中获取内容,并将新记录写入内存.我希望能够保持对共享内存对象的引用.

  2. 如果我不能直接这样做,我将如何间接地做到这一点?我想我可以保持一个非共享内存的std ::向量,并分配一个非共享内存的std :: string持有areaKey,这是一个std :: string的值,然后做的投void*项目返回std::string然后使用它从共享内存区域中获取记录.对于一些如此基本的东西来说,这似乎都是非常必要的工作.也许boost :: interprocess …

c++ boost boost-interprocess visual-c++-2008 visual-c++

7
推荐指数
1
解决办法
468
查看次数

How to enforce Delphi Coding Standards

I want to enforce coding standards for our Delphi codebase.

A few colleagues have suggested Code Healer and Pascal Analyzer. I've had a look at these tools and they aren't suitable.

I was hoping to be able to do the same thing that CheckStyle for Java or StyleCop for C# can do

delphi coding-style

6
推荐指数
1
解决办法
2953
查看次数

当变量未初始化时,会产生简单的代码

今天有一位朋友问我下面的代码:

var
  a: Integer;
begin
  ShowMessage(IntToStr(a));
end;
Run Code Online (Sandbox Code Playgroud)

这是局部变量,尚未初始化,好吗?

将代码放在按钮组件的OnClick事件中,然后以下面三种不同的方式运行代码:

  1. 单击按钮,查看结果,结果= 1635841
  2. 按Enter键,查看结果,结果= 1
  3. 按Space键查看结果,reuslt = 1636097

我在两台不同的计算机上测试代码并看到相同的结果,对此有何看法?

delphi

6
推荐指数
1
解决办法
493
查看次数

在XCode 4.5中使用ARC的Phantom内存泄漏,其中dealloc被明确调用或者是一个Instruments问题?

前言; 这不是一般的"我有一个漏洞的巨型应用程序"问题.这是一个特定的问题,关于自动引用计数在一个近乎琐碎的演示应用程序中无法正常工作,具有完整的源代码,或细微的代码生成或编译器问题,或者在工具中的错误.(TLDR:哦.实际上是一个奇怪的小竞争条件)

我感到困惑的是,仪器的"分配"列表显示了一个实例泄漏但是,我有一个该类的实例,只有一个,而ARC正在调用dealloc方法,我知道它被调用因为在dealloc完成时会打印一条NSLog消息,但它仍会显示在Instruments中的泄漏列表中.

retainCount永远不会超过1.它没有被任何人保留,并且它被释放,但它看起来像是"泄漏",因为它在Instrument的泄漏中显示为活动实例.

怎么可能?

我还在学习ARC的Objective-C,所以我认为我必须犯一个常见的初学者错误.这是我唯一的init和我的对象的dealloc:

- (id) initWithMessage:(NSString*)messageForUser
{
    self = [super init];
    if (self)
    {
        _message = messageForUser;
        NSLog( @"from constructor: %@",_message);
    }
    return self;

}

- (void)dealloc {
    NSLog(@"Goodbye cruel world. One WPMyObject signing off.");
   // [message release]; // ARC forbiddeth thee! Begone release.
    _message = nil;

   // [super dealloc]; // ARC forbiddeth explicit super dealloc
}
Run Code Online (Sandbox Code Playgroud)

只是为了看我是否可以,我试着调用[super dealloc]dealloc方法,ARC阻止你一个错误,这很好,因为它会为你做这件事.但是当我编写自己的init方法时,它并没有阻止我.

当我在XCode中使用"Run"运行程序时,我得到了"再见残酷的世界"NSLog消息,正如我希望的那样,当dealloc运行时,我也得到了这个实例仍然存在的证据.运行时,使用使用内存泄漏模板的Instruments分析:

如果我在没有下面的实例创建代码的情况下运行,我只报告了一些标准库malloc泄漏,但如果我添加此代码,则会发生所有泄漏:

  WPMyObject * myObject = [[WPMyObject alloc] initWithMessage: @"Hello World!\n" ];
Run Code Online (Sandbox Code Playgroud)

这就是我所看到的,并且我认为我理解是告诉我WPMyObject的唯一实例是泄漏:

在此输入图像描述

完整的源代码非常简单(使用Objective-C的一个小型Mac OS X命令行应用程序 …

cocoa objective-c instruments ios automatic-ref-counting

6
推荐指数
1
解决办法
1236
查看次数