到目前为止,我已经有过使用COM +技术的经验来构建3层应用程序.这是一项巨大而先进的技术,支持许多有趣的概念.它只适用于在LAN上运行的应用程序.
现在我打算建立3层系统,仍然基于D7.不同之处在于它应该在互联网上运行.客户将分散在世界各地.根据我在这种情况下的经验,我不会依赖com +.Com +基本上需要稳定的连接,配置必须打开相当广泛的端口的防火墙服务器并不容易(即使你缩小它).
所以问题是.什么体系结构(Web服务,服务或其他)在生产中适合您?我想我想拥有一个侦听一个tcp端口的服务.我可以在其中保存可用于打开会话的会话客户端参数.此外,某种内置加密技术将是一个优势.
感谢帮助!
我在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它就可以完全启动.当我尝试从系统服务运行服务时,只发生错误...
如果我重新启动计算机,一切正常....
有任何想法吗?
我有一些全局字符串变量.
我必须创建我可以传递的函数并将它们存储在某个结构中.后来我需要枚举它们并检查它们的值.
如何轻松实现这一目标?
(我想我需要某种反射,或存储指针数组).无论如何,任何帮助将不胜感激.
谢谢!
我用GetMem(1028字节长度)分配内存,所以我有一个分配的指针.
然后我正在阅读内容,我知道有例如1028字节读取.如何转换指针,或将其转换为字符串?
我应该在转换之前将null内容终止吗?
谢谢!
我有一个字符串变量,从中我可以通过以下循环获得以下字节:
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) 问题是关于类中的静态数据.
如果那是一个服务类,那么我认为实例化模式很重要.但是,如果我有另一个独立的单身人士课程,会发生什么?
我可以在那里创建一个可用于所有每次呼叫呼叫的对象吗?IIS是否永远在内存中有这个dll,以便单例将一直在内存中?
如何使某些对象可用于所有WCF客户端调用?是可以在IIS中执行此操作还是应该在Windows服务中托管WCF服务?
我这里有一个代码:
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) 我有转换字符串的问题,让我们说:"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函数.
有人可以点亮它或粘贴代码片段怎么做?
谢谢!
我在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) 我正在使用从.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的内存时,我可以缓解这个问题,但有时它仍然会发生.
难道我做错了什么?