小编Joh*_*ica的帖子

如何在不使用ShareMem Unit的情况下将动态数组字符串传递给dll库(d7和d7编写的客户端)?

我在这个页面上看到动态数组需要ShareMem单元才能正常工作.

不过,我想为其他语言编写一个dll.

谁能告诉我如何声明函数及其参数来传递String数组?

没有ShareMem,是不是真的不允许这样的事情?

var
  templates : array of WideString;
begin
  SetLength(templates, 2); 
  templates[0] := 'template1';
  templates[1] := 'template2';
end
DLLFunction(@templates[0]); 
Run Code Online (Sandbox Code Playgroud)

感谢帮助!

arrays delphi string dll delphi-7

8
推荐指数
1
解决办法
2183
查看次数

接口方法总是虚拟的吗?

编译以下代码时出现错误:

TOmniParallelSimplePooledLoop = class(TOmniParallelSimpleLoop)
  procedure Execute(loopBody: TOmniIteratorSimpleSimpleDelegate); overload; override;
Run Code Online (Sandbox Code Playgroud)

[dcc64 Error] OtlParallel.pas(846):E2170无法覆盖非虚方法

如果我将祖先方法设为虚拟,那么错误就会消失.

但是祖先方法声明在:

IOmniParallelSimpleLoop
  ...
  procedure Execute(loopBody: TOmniIteratorSimpleSimpleDelegate); overload;
Run Code Online (Sandbox Code Playgroud)

基本方法TOmniParallelSimpleLoop从非虚拟到虚拟的重新声明是否会更改基类型,或者是已经虚拟的方法(由于它是接口方法的实现)?

换句话说:当接口方法从非虚拟变为虚拟时,编译器会输出不同的代码吗?

基本MSVC重新创建错误

program Project70;
{$APPTYPE CONSOLE}
uses
  System.SysUtils;

type
  I1 = interface
    procedure DoSomething;
  end;

  T1 = class(TInterfacedObject, I1)
    procedure DoSomething;
  end;

  T2 = class(T1)
    procedure DoSomething; override;
  end;

procedure T1.DoSomething;
begin
  WriteLn('parent');
end;

procedure T2.DoSomething;
begin
  Writeln('Child');
end;

begin
end.
Run Code Online (Sandbox Code Playgroud)

delphi virtual interface class

8
推荐指数
1
解决办法
438
查看次数

为什么在此代码中忽略析构函数?

以下代码演示了Turbo C++ Explorer项目中的一个奇怪问题.超出范围后,D :: D()中的三个堆栈对象之一不会被销毁.

只有在发布模式下编译时才会发生这种情况,auto_ptrs a_和b_属于不同类型,抛出的异常不会从std :: exception继承.它似乎在VC++ 2005和C++ Builder 2009中工作正常.我确实安装了BDS2006 Update 2,修补程序汇总和修补程序12.

是我的代码还是编译器?你知道修复吗?无法在VCL项目中可靠地使用auto_ptr会非常不方便.


#include <memory>
#include <stdexcept>
#include <iostream>

typedef std::exception my_error; // will work fine if replaced with line below
//class my_error : public std::exception {};

class A {};
class B {};

class C
{
public:
    C(int id) : id_(id) { std::cout << "C::C() " << id_ << std::endl; };
    ~C() { std::cout << "C::~C() " << id_ << std::endl; };
private:
    int id_;
};

class D …
Run Code Online (Sandbox Code Playgroud)

c++ destructor c++builder

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

跟踪Windows服务中的stackoverflow错误

我对我的一个Windows服务做了一个小小的调整,而不是我运行它得到了,

描述:由于堆栈溢出,进程终止.

所以我回到旧版本并运行它,我仍然得到stackoverflow错误.

最糟糕的部分是我调试了两个,我没有得到这个错误再次发生.如何/什么是找到导致Windows服务溢出的最佳方法?

c# stack-overflow windows-services

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

我的子查询为执行时间增加了20秒.我怎样才能加快速度?

我有一个已发送短信的表格,该短信必须加入到送达回执表中才能获得最新的短信状态.

有997,148条发送短信.

我正在运行此查询:

SELECT
    m.id,
    m.user_id,
    m.api_key,
    m.to,
    m.message,
    m.sender_id,
    m.route,
    m.submission_reference,
    m.unique_submission_reference,
    m.reason_code,
    m.timestamp,
    d.id AS dlrid,
    d.dlr_status
FROM
    messages_sent m
LEFT JOIN
    delivery_receipts d
ON
    d.message_id = m.id
AND
    d.id = (SELECT MAX(id) FROM delivery_receipts WHERE message_id = m.id)
Run Code Online (Sandbox Code Playgroud)

返回997,148个结果,包括每条消息的最新状态.

这需要22.8688秒来执行.

这是SQL messages_sent:

CREATE TABLE IF NOT EXISTS `messages_sent` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`api_key` varchar(40) NOT NULL,
`to` varchar(15) NOT NULL,
`message` text NOT NULL,
`type` enum('sms','mms') NOT NULL …
Run Code Online (Sandbox Code Playgroud)

php mysql sql database phpmyadmin

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

在Xcode 4版本控制中,当您刚刚添加到项目中的文件附近有问号时,它意味着什么?

如何更改它以确保正确添加文件?

我将一些文件复制到我的项目文件夹中.然后在Xcode中我点击了一个组并选择了"将文件添加到项目......".然后我选择了多个文件.

其中一个文件被正确添加 - 它旁边有一个"A".另一个文件有一个"?" 标记旁边.

为什么没有正确添加?我该怎么做才能正确添加它?这是一个PNG文件.

version-control xcode xcode4.2

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

如何从Windows控制面板定义位置和显示语言

在此输入图像描述

德尔福xe.

对于Tab Administrative- Unicode lang
使用GetSystemDefaultLangID

对于Tab Formats-
使用GetUserDefaultLangID

但是我对For Tab使用了Location什么?

对于
Vista及更高版本的"键盘和语言"选项卡:带有键LOCALE_CUSTOM_UI_DEFAULT的Getlocaleinfo

Function GetLocaleInformation(flag: integer): string;
var
  pclca: array[0..20] of char;
begin
  if (GetLocaleInfo(
      //locale_system_default - Always identical values returns
      LOCALE_CUSTOM_UI_DEFAULT // work only Vista-Win7, not Xp **
      ,flag,pclca,19) <= 0 ) then begin
    pclca[0] := #0;
  end;
  Result := pclca;
end;
Run Code Online (Sandbox Code Playgroud)
  1. 如何在Xp + Win7中定义位置和在Xp中显示语言?
  2. 可以是为Xp和Win7定义"显示语言"的通用密钥
  3. 如何接收已建立的界面语言列表?

delphi locale

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

单引号在浏览器中显示为菱形问号(无数据库或PHP)

我正在使用一个网页,我将字符集从iso-8859-1切换到utf-8.页面顶部如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>[title of site]</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)

我只在页面中使用ASCII字符,并且由于utf-8编码超集ASCII,这应该没问题.但是,文中的单引号显示为黑色钻石包围的问号.我已经验证这些是ASCII单引号(不是直引号).

我在网上阅读的内容很多,描述了涉及PHP,魔术引号,数据库配置等问题的解决方案.但是,这是一个没有任何程序呈现的平面HTML页面.

此外,许多有这个问题的人被告知切换到UTF-8来解决问题.这正是我引入问题的方式.

请查看http://mch.blackcatwebinc.com/src/events.html以查看此问题.

html quotes utf-8

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

如何在当前单位的使用子句中添加单位

我刚开始探索实时模板的功能(使用Delphi XE4),并遇到了一个问题.我创建的一些模板创建的代码需要将某些单元添加到我的uses子句才能运行.

如果尚未包含使用子句,如何让我的模板自动将所需单位添加到uses子句中?我最初的猜测是,为了做到这一点,我需要制作一个自定义脚本引擎,并且我发现了一些似乎包含足够信息的文章,我可以毫不费力地创建脚本引擎.但是,我不知道如何让脚本引擎实际执行我想要的任务.我假设我需要使用Open Tools Api,但我不知道该怎么做.

如果我走在正确的轨道上,有人可以分享一些有助于我继续下去的信息吗?否则,有人能指出我正确的方向吗?

delphi delphi-xe4

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

在树视图节点中显示额外的文本,而不仅仅是node.text

我在Delphi中有一个TTreeView,其节点分为三个级别.

我使用节点数据来存储除节点文本之外的另一个标签.

Type
  TNodeData = class
    ExtraNodeLabel: WideString;
    //... other members
  end;
Run Code Online (Sandbox Code Playgroud)

我有一个OnAdvancedCustomDrawItem事件,我想ExtraNodeLabel在节点文本之前显示它. 我希望实现这一目标:

  • 蓝色文本将是额外的标签.
  • higlighted项目:前两个单词也是一个额外的标签

在此输入图像描述

到目前为止,我得到的是:

在此输入图像描述

问题:

  1. 出于某种原因,如果我使用DrawText/ drawTextW我不能用不同的样式绘制文本(因为unicode数据我需要drawtextW)
  2. 另一个问题是,虚线焦点矩形之外的任何东西都是不可点击的

需要解决的问题:

  1. 如何使用DrawText/ 绘制不同风格的文本DrawtextW
  2. 如何使整个文本可点击?

码:

procedure TMainForm.TntTreeView1AdvancedCustomDrawItem(
  Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
  Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
var
  txtrect, fullrect : TRect;
  DC: HDC;
  fs: integer;
  fc: TColor;
  ExtralabelRect: TRect;
  nData: TNodeData;
begin
  nData := nil;

  if assigned(Node.Data) then begin
    nData := TNodeData(Node.Data);
  end;

  DC := TntTreeView1.canvas.Handle;
  txtRect := …
Run Code Online (Sandbox Code Playgroud)

delphi treeview custom-draw delphi-5

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