小编Mar*_*lka的帖子

PWideChar参数的功能仅取第一个char

我刚遇到一个奇怪的问题.我正在尝试将模型加载到OpenGL,在我加载纹理的部分我使用auxDIBImageLoadA(dibfile:PWideChar)函数.这是我的代码调用它

procedure CreateTexture(var textureArray: array of UINT; strFileName: string; textureID: integer);       // Vytvožení textury
var
  pBitmap: PTAUX_RGBImageRec;                                                   
begin
  if strFileName = '' then exit;                                                
  MessageBox(0,PWideChar(strFileName),nil,SW_SHOWNORMAL);
  pBitmap := auxDIBImageLoadA(PWideChar(strFileName));      
  if pBitmap = nil then exit;    
...
Run Code Online (Sandbox Code Playgroud)

MessageBox仅用于控制.这就是:我运行应用程序,"FACE.BMP"出现一个框.好的.但后来我说错了"Failed to open DIB file F".当我设置stFileNamexFACE.BMP,我得到一个"Failed to open DIB file x".因此,出于某种原因,该函数似乎只采用了第一个字符.

我错过了什么吗?我正在使用glaux.dll,我从不同来源下载了5次,所以它应该没有错误(我希望每个OpenGL网站都提到它).

delphi opengl string pointers char

4
推荐指数
1
解决办法
1842
查看次数

不要阻止Windows关闭OnCloseQuery

我有一个应用程序隐藏在红十字会关闭.用户可以通过右键单击托盘图标并选择退出来退出.但它显然会阻止Windows关闭,所以我做了一个程序来响应WM_QUERYENDSESSION来启用关闭,这是相关的代码:

procedure TMainForm.OnWindowsEnd(var Msg: TMessage); // responds to message WM_QUERYENDSESSION;
begin
  AllowClose:=true;
  Close;
end;

procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose:=AllowClose;
  if NOt AllowClose then
    Hide;
end;
Run Code Online (Sandbox Code Playgroud)

但奇怪的事情不断发生.当我发出关闭时,这个应用程序很好地关闭.但就是这样.当我发出第二次关机时,系统退出正常.(我在WinXP中测试这个).

可能是什么原因?谢谢


答案 代码应如下所示

procedure TMainForm.OnWindowsEnd(var Msg: TMessage); // responds to message WM_ENDSESSION;
begin
  // Possible checking for flags, see http://msdn.microsoft.com/en-us/library/aa376889%28v=vs.85%29.aspx
  AllowClose:=true;
  Msg.Result:=1;
end;

procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose:=AllowClose;
  if NOt AllowClose then
    Hide;
end;
Run Code Online (Sandbox Code Playgroud)

windows delphi system-shutdown

4
推荐指数
1
解决办法
1779
查看次数

使用IdTCPClient和IdTCPServer发送和接收TMemoryStream

我在XE2中找到了Remy Lebeau的IdTCP组件聊天演示,我想稍微玩一下.(可以在这里找到)我想使用这些组件发送图片,最好的方法似乎是使用TMemoryStream.如果我发送字符串,连接工作正常,字符串传输成功,但是当我将其更改为流时,它不起作用.这是代码:

服务器

procedure TMainForm.IdTCPServerExecute(AContext: TIdContext);
var rcvdMsg: string;
  ms:TMemoryStream;
begin
// This commented code is working, it receives and sends strings.
//  rcvdMsg:=AContext.Connection.IOHandler.ReadLn;
//  LogMessage('<ServerExec> '+rcvdMsg);
//
//  TResponseSync.SendResponse(AContext, rcvdMsg);
  try
    ms:=TMemoryStream.Create;
    AContext.Connection.IOHandler.ReadStream(ms);

    ms.SaveToFile('c:\networked.bmp');
  except
    LogMessage('Failed to receive',clred);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

客户

procedure TfrmMain.Button1Click(Sender: TObject);
var ms: TMemoryStream;
    bmp: TBitmap;
    pic: TPicture;
    s: string;
begin
  // Again, this code is working for sending strings.
  // s:=edMsg.Text;
  // Client.IOHandler.WriteLn(s);
  ms:=TMemoryStream.Create;

  pic:=TPicture.Create;
  pic.LoadFromFile('c:\Back.png');

  bmp:=TBitmap.Create;
  bmp.Width:=pic.Width;
  bmp.Height:=pic.Height;
  bmp.Canvas.Draw(0,0,pic.Graphic);

  bmp.SaveToStream(ms);
  ms.Position:=0;
  Client.IOHandler.Write(ms); …
Run Code Online (Sandbox Code Playgroud)

delphi tcp indy

4
推荐指数
1
解决办法
1万
查看次数

Maven 原型 - 可选属性,默认为空

我希望能够从我的原型生成一个项目,其中一个属性默认为空,或者如果在命令行上指定则填充。

这是我的archetype-metadata.xml

<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="basic">
    <requiredProperties>
        <requiredProperty key="compilerVersion"/>
        <requiredProperty key="dependencyClassifier">
            <defaultValue></defaultValue>
        </requiredProperty>
    </requiredProperties>
</archetype-descriptor>
Run Code Online (Sandbox Code Playgroud)

这是行不通的。如果 中有任何非空白值dependencyClassifier,则它可以完美运行。但是,我无法让它在默认值为“空”的情况下工作。

我在defaultValue为空/空时得到的错误是:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:generate (default-cli) on project standalone-pom: Archetype com.avast.archetype:compile-java:1.0.21 is not configured
[ERROR] Property dependencyClassifier is missing.
[ERROR] -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

或者,我会接受能够在命令行上传递一个空值(或“空白”值)。同样,使用"-DdependencyClassifier= "不起作用。

如何指定属性默认为空?

谢谢


我想要实现的是能够从原型创建一个项目,其中包含一个依赖声明:

    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>artifact</artifactId>
            <version>${dependencyVersion}</version>
            <classifier>${dependencyClassifier}</classifier>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

我需要能够实例化${dependencyClassifier}原型创建。这是可能的${dependencyVersion},因为它永远不会为空。但是,默认情况下,分类器应为空。

pom.xml maven-3 maven maven-archetype

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

上载大文件(几个GB)时,nginx返回内部服务器错误

我在nginx后面有一个Artifactory,上传大于4 GB的文件失败。我可以肯定这是nginx的错,因为如果文件从本地主机上传到本地,则不会发生任何问题。

nginx的设置有client_max_body_sizeclient_body_timeout足够大的并非是一个问题。

尽管如此,当通过curl上传大文件(> 4 GB)时,大约半分钟后它仍然失败。我收到的唯一错误消息是HTTP 500 Internal Server Error,没有任何内容写入nginx的错误日志。

nginx artifactory

4
推荐指数
1
解决办法
2718
查看次数

指针与TType

我有一个看似非常基本的问题,但我只是想确定一下.

这两者有区别吗?

var ClassArray: array of TMyClass;

constructor TMyClass.Create;
begin
  SetLength(ClassArray, Length(ClassArray)+1);
  ClassArray[Length(ClassArray)-1]:=Self;
end;

begin
  for i:=0 to x do
  ClassArray[i].MyProcedure;
Run Code Online (Sandbox Code Playgroud)

var PointerArray: array of Pointer;

constructor TMyClass.Create;
begin
  SetLength(PointerArray, Length(PointerArray)+1);
  PointerArray[Length(PointerArray)-1]:=Self;
end;

begin
  for i:=0 to x do
  TMyClass(PointerArray[i]).MyProcedure;
Run Code Online (Sandbox Code Playgroud)

因为当我玩它时它的工作方式,唯一的区别是我无法直接查看PointerArray中的元素(因为只显示了地址).

谢谢

delphi pointers class

3
推荐指数
1
解决办法
143
查看次数

尝试从命名空间 (...) 加载类“ClassName”。即使命名空间已导入

我有一个 Symfony 项目,我向其中添加了一些包含各种类的非 symfony php 文件。但由于某种原因,即使 IDE 正确地看到了这些类,加载网站时也不会加载这些类。

所以,我有一个类需要其他类:

namespace rootspace\FrontBundle\Controller;

use rootspace\FrontBundle\Networks\TwitterOAuth;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class TwitterController extends Controller
{
    public function connectAction(){
        // The TwitterOAuth instance
        $connection = new TwitterOAuth('abc', '123');
    }
}
Run Code Online (Sandbox Code Playgroud)

然后是无法加载的类(需要另一个文件)

namespace rootspace\FrontBundle\Networks;

/* Load OAuth lib. You can find it at http://oauth.net */
//require_once('OAuth.php'); -- should this be commented out?

/**
 * Twitter OAuth class
 */
class TwitterOAuth {
  /* Contains the last HTTP status code returned. */
}
Run Code Online (Sandbox Code Playgroud)

最后是第三个文件

namespace …
Run Code Online (Sandbox Code Playgroud)

php namespaces symfony

3
推荐指数
1
解决办法
1万
查看次数

使用基本身份验证保护 Spring Boot REST 应用程序

我查阅了有关使用 Spring Security 的文章,但它们并不能完全满足我的需求。他们通常处理内存中的用户和明文密码。

我想要达到的目标:

客户端使用基本身份验证进行身份验证。

安全控制器方法如下所示:

  @RequestMapping(value = "/test")
  public ResponseEntity test(@AuthenticationPrincipal MyUser user){
      // Logic
  }
Run Code Online (Sandbox Code Playgroud)

如果给定用户已通过身份验证,我希望控制器方法在其参数中获取一个 MyUser 对象,否则为 null。

我将散列密码和用户的盐存储在数据库中,并且我有一个服务,该服务对给定的用户名-密码对进行身份验证,并在身份验证成功或失败时分别返回一个 User 对象或 null。

现在需要做的就是拦截每个请求,查看基本身份验证标头,将信息传递给我的自定义身份验证服务,然后将其结果传递给控制器​​方法。不幸的是,我无法做到这一点。


我继续阅读使用 custom UserDetailsService,但这似乎只能处理从数据库中获取用户数据,而不是任何身份验证。我无法弄清楚如何将所有组件连接在一起。

你能指出我如何让​​这个相当简单的工作流程工作的正确方向吗?


编辑

我没有使用 XML 配置,我拥有的唯一与安全相关的配置是:

@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**").csrf().disable();

        http.authorizeRequests()
                .antMatchers("/user").permitAll()
                .antMatchers("/user/**").permitAll()
                .anyRequest().authenticated();
    }
}
Run Code Online (Sandbox Code Playgroud)

java authentication spring spring-mvc spring-security

3
推荐指数
1
解决办法
1万
查看次数

Supervisord 不会在停止命令时杀死所有生成的节点进程

我在使用 Supervisord 部署新服务时遇到了一些奇怪的事情。这些是相关部分:

\n
# supervisord.conf\n\n[program:express]\ncommand=yarn re-express-start\n
Run Code Online (Sandbox Code Playgroud)\n
# package.json\n{\n  "scripts": {\n    "re-express-start": "node lib/js/client/Express.bs.js",\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当我运行时supervisorctl start,节点服务器按预期启动。但是在我运行之后supervisorctl stop,服务器继续运行,即使主管认为它已被杀死。

\n

如果我将supervisord.conf文件更改为直接执行node lib/js/client/Express.bs.js(无需经过yarn),那么这将按预期工作。但我想浏览一下package.json定义的脚本。

\n

我研究了进程树的样子,但不太明白为什么。以下是停止supervisord-management服务之前和之后的流程。

\n
$ ps aux | grep node\nuser     12785  1.4  3.5 846404 72912 ?        Sl   16:30   0:00 node /usr/bin/yarn re-express-start\nuser     12796  0.0  0.0   4516   708 ?        S    16:30   0:00 /bin/sh -c node lib/js/client/Express.bs.js\nuser     12797  5.2  2.7 697648 56384 ?        Sl   16:30   0:00 …
Run Code Online (Sandbox Code Playgroud)

process node.js supervisord yarnpkg

3
推荐指数
1
解决办法
2070
查看次数

unittest.Mock - 结合 return_value 和 side_effect

是否可以让一个Mock对象在调用时返回一个值并在调用时执行一条语句?例如这个:

> mocked_func = Mock(return_value='Returned foo', 
                     side_effect=lambda: print('Side effect executed')
                    )

> print(mocked_func())

Side effect executed
None
Run Code Online (Sandbox Code Playgroud)

这里的文档似乎有点含糊,但在我看来,side_effect使用 when 时,then被完全忽略,只返回 functionreturn_value的结果(在is的情况下)。side_effectprint()None

由于Python并不真正支持多语句lambda(据我所知,你能做的最好的事情就是将表达式放入一个元组中,但随后将返回整个元组) - 是否可以组合两个参数?

我想避免必须定义一个新函数并将其用作side_effect,我觉得在 a 中声明两者Mock更干净。

python unit-testing mocking

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