小编Joh*_*ohn的帖子

D7的3层应用程序架构

到目前为止,我已经有过使用COM +技术的经验来构建3层应用程序.这是一项巨大而先进的技术,支持许多有趣的概念.它只适用于在LAN上运行的应用程序.

现在我打算建立3层系统,仍然基于D7.不同之处在于它应该在互联网上运行.客户将分散在世界各地.根据我在这种情况下的经验,我不会依赖com +.Com +基本上需要稳定的连接,配置必须打开相当广泛的端口的防火墙服务器并不容易(即使你缩小它).

所以问题是.什么体系结构(Web服务,服务或其他)在生产中适合您?我想我想拥有一个侦听一个tcp端口的服务.我可以在其中保存可用于打开会话的会话客户端参数.此外,某种内置加密技术将是一个优势.

感谢帮助!

architecture delphi 3-tier delphi-7

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

在d7 windows服务中0x0eedfade kernelbase.dll错误模块

我在D7写了一个Windows服务.直到今天它还不想发布它完全正常.

在事件日志中我收到错误:

错误应用程序名称:XServ12.exe,版本:0.0.0.0,时间戳:0x2a425e19错误模块名称:KERNELBASE.dll,版本:6.1.7600.16385,时间戳:0x4a5bdbdf异常代码:0x0eedfade错误偏移量:0x0000b727错误进程id:0xbb4错误申请开始时间:0x01cca43b2aee203a

我在某处读到了这可能是单元初始化部分的问题.好吧,我已经从项目中删除了几乎所有单位,并留下:Sysutils,CLasses,Dialogs.当Dialogs.pas单元存在时,我删除它时仍然出现错误,程序成功进入项目dpr部分的开头.

此外,即使我拥有所有这3个单位并且只需手动运行exe它就可以完全启动.当我尝试从系统服务运行服务时,只发生错误...

如果我重新启动计算机,一切正常....

有任何想法吗?

delphi

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

如何通过名称(字符串)访问变量?

我有一些全局字符串变量.

我必须创建我可以传递的函数并将它们存储在某个结构中.后来我需要枚举它们并检查它们的值.

如何轻松实现这一目标?

(我想我需要某种反射,或存储指针数组).无论如何,任何帮助将不胜感激.

谢谢!

delphi rtti

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

指向字符串转换的指针?

我用GetMem(1028字节长度)分配内存,所以我有一个分配的指针.

然后我正在阅读内容,我知道有例如1028字节读取.如何转换指针,或将其转换为字符串?

我应该在转换之前将null内容终止吗?

谢谢!

delphi

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

如何适当地从字符串中获取字节?

我有一个字符串变量,从中我可以通过以下循环获得以下字节:

Bytes I get: 1e 05 55 3c *e2 *91 6f 03 *fe 1a 1d *f4 51 6a 5e 3a *ce *d1 04 *8c 

With that loop:

  byte[] temp = new byte[source.Length];
  string x = "";
  for (int i = 0;i != source.Length;i++)
  {
    temp[i] = ((byte) source[i]);
  }
Run Code Online (Sandbox Code Playgroud)

现在我想简化该操作并使用 Encoding 的 GetBytes。问题是我无法适应适当的编码。例如,我得到的几个字节不正确:

Encoding.ASCII.GetBytes(source):    1e 05 55 3c *3f *3f 6f 03 *3f 1a 1d *3f 51 6a 5e 3a *3f *3f 04 *3f
Encoding.Default.GetBytes(source):  1e 05 55 3c  e2 …
Run Code Online (Sandbox Code Playgroud)

c# encoding

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

IIS中托管的WCF服务的生命周期

问题是关于类中的静态数据.

如果那是一个服务类,那么我认为实例化模式很重要.但是,如果我有另一个独立的单身人士课程,会发生什么?

我可以在那里创建一个可用于所有每次呼叫呼叫的对象吗?IIS是否永远在内存中有这个dll,以便单例将一直在内存中?

如何使某些对象可用于所有WCF客户端调用?是可以在IIS中执行此操作还是应该在Windows服务中托管WCF服务?

.net c# wcf singleton

5
推荐指数
1
解决办法
6191
查看次数

释放内部接口问题的界面

我这里有一个代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  IInnerTest = interface (IInterface)
    procedure DoSth;
  end;

  TRekScannerData = record
    Source: Integer;
    Device: IInnerTest;
  end;

  ITest = interface (IInterface)
    procedure DoSth;
  end;

  ATest = class(TInterfacedObject, ITest)
  private
    FInner: Array of TRekScannerData;
  public
    procedure DoSth;
    constructor Create();
    Destructor Destroy();override;
  end;

  AInnerTest = class (TInterfacedObject, IInnerTest)
  private
    FMainInt: ITest;
  public
    constructor Create(MainInt: ITest);
    procedure DoSth;
    Destructor Destroy();override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7

5
推荐指数
1
解决办法
146
查看次数

将字符串转换为SHA1和base64

我有转换字符串的问题,让我们说:"TestPassword"到SHA1和base64.

一般根据该网站:http: //www.online-convert.com/result/1f76972748a7d186198171e9a11e9493

我应该得到以下密码的结果:

hex: 6250625b226df62870ae23af8d3fac0760d71588
HEX: 6250625B226DF62870AE23AF8D3FAC0760D71588
h:e:x: 62:50:62:5b:22:6d:f6:28:70:ae:23:af:8d:3f:ac:07:60:d7:15:88
base64: YlBiWyJt9ihwriOvjT+sB2DXFYg=  <-- That is what I would like to achieve ...
Run Code Online (Sandbox Code Playgroud)

将字符串转换为SHA1没有问题,但我不知道如何将它再次转换为base64,因为需要将每两个字符视为十六进制字节,然后将其传递给base64函数.

有人可以点亮它或粘贴代码片段怎么做?

谢谢!

php

5
推荐指数
1
解决办法
7191
查看次数

将字符串封送到非托管内存,将它们传递给c ++并再次返回c#

我在c#中创建非托管内存块,并用结构中的数据填充它.

我遍历结构列表并执行以下操作:

Marshal.StructureToPtr(structTemp, currentMemoryPosition, false);
currentMemPosition = new IntPtr(currentMemPosition.ToInt64() + structSize);      
Run Code Online (Sandbox Code Playgroud)

该结构包含引用类型:"string".我已经研究了BOL的StructureToPtr方法,它说:

"All other reference types (for example, strings and arrays) are marshaled to copies"
Run Code Online (Sandbox Code Playgroud)

究竟是什么意思?

这是否意味着对该字符串的引用仍将在内存中,尽管结构的实例将超出范围?

上面的非托管内存块,我传递给使用它的c ++方法.当作业在c ++部分完成时,我再次遍历内存中的结构(在c#中)和:

Marshal.DestroyStructure(currentMemPosition, typeof(struct));
Run Code Online (Sandbox Code Playgroud)

对我来说最重要的问题是:

Whether I can:

1) Create structs with strings inside
2) Marshal them to unmanaged mamory
3) Make use of them on c++ side
4) **Return them from c++**
5) Read them again in c#
6) Deallocate them in c# by using Marshal.DestroyStructure (EDITED)
Run Code Online (Sandbox Code Playgroud)

带字符串引用类型的struct布局是:

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi, Pack …
Run Code Online (Sandbox Code Playgroud)

c# marshalling

5
推荐指数
1
解决办法
2310
查看次数

为什么我使用Mike Heydon的TStringBuilder类来获取访问冲突?

我正在使用从.Net移植到Delphi 7 的TStringBuilder类.

这是我的代码片段:

procedure TForm1.btn1Click(Sender: TObject);
const
  FILE_NAME = 'PATH TO A TEXT FILE';
var
  sBuilder: TStringBuilder;
  I: Integer;
  fil: TStringList;
  sResult: string;
  randInt: Integer;
begin
  randomize;
  sResult := '';
  for I := 1 to 100 do
  begin
    fil := TStringList.Create;
    try
      fil.LoadFromFile(FILE_NAME);

      randInt := Random(1024);

      sBuilder := TStringBuilder.Create(randInt);
      try
        sBuilder.Append(fil.Text);
        sResult := sBuilder.AsString;
      finally
        sBuilder.free;
      end;

      mmo1.Text := sResult;
    finally
      FreeAndNil(fil);
    end;
  end;
  showmessage ('DOne');
end;
Run Code Online (Sandbox Code Playgroud)

我遇到了AV错误.当我创建大小倍数为1024的内存时,我可以缓解这个问题,但有时它仍然会发生.

难道我做错了什么?

delphi stringbuilder getmem

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