有用过MDaemon的吗?

Again 2001-02-08 02:26:00
MDaemon下面有一个Dll,有一份用VC写的头声明,我想把它转成pas,但是总是出错。有没有用过MDaemon的?
因为以前问过这个问题,但是没有解决所以先给20分,如果可以解决我再加分。
...全文
159 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ether 2001-02-09
  • 打赏
  • 举报
回复
我用Mdaemon,是MDUserImports.h吧?
下个http://www.drbob42.com/headconv下个*.h到*.pas的小软件,再手工修改吧。
Again 2001-02-09
  • 打赏
  • 举报
回复
http://www.drbob42.com/headconv没找到啊。

MD-API.html里有一段对MDaemon API的描述(见下边),我把它译成pas:

=====================================================vc=======
#define DOMAIN_LEN 45
#define MAILBOX_LEN 30
#define FULLNAME_LEN 30
#define MAILDIR_LEN 90
#define PASSWORD_LEN 20
#define MAXMESSAGECOUNT_LEN 4
#define MAXDISKSPACE_LEN 6
#define EMAIL_LEN MAILBOX_LEN+DOMAIN_LEN+1
#define FWDADDR_LEN 256
#define FWDHOST_LEN 64
#define FWDSENDAS_LEN 128
#define FWDPORT_LEN 8
#define USERDEFINED_LEN 256

struct MD_UserInfo
{
char Email[EMAIL_LEN+1];
char Mailbox[MAILBOX_LEN+1];
char Domain[DOMAIN_LEN+1];
char FullName[FULLNAME_LEN+1];
char MailDir[MAILDIR_LEN+1];
char Password[PASSWORD_LEN+1];
bool AutoDecode;
bool IsForwarding;
bool AllowAccess;
bool AllowChangeViaEmail;
bool KeepForwardedMail;
bool HideFromEveryone;
bool EncryptMail;
bool ApplyQuotas;
bool EnableMultiPOP;
bool LocalOnly;
long MaxMessageCount;
long MaxDiskSpace;
int WebConfig;
char FwdAddress[FWDADDR_LEN+1];
char FwdHost[FWDHOST_LEN+1];
char FwdSendAs[FWDSENDAS_LEN+1];
char FwdPort[FWDPORT_LEN+1];
char NTAccount[MAILBOX_LEN+1];
char MailFormat[MBXFORMAT_LEN+1];
char AutoRespScript[MAX_PATH+1];
char AutoRespProcess[MAX_PATH+1];
char AutoRespExclude[AUTORESPEXCLUDE_LEN+1];
char AddToList[EMAIL_LEN+1];
char RemoveFromList[EMAIL_LEN+1];
bool PassMessageToProcess;
long MaxUIDLCount;
long MaxMessageSize;
char UserDefined[USERDEFINED_LEN+1];
};

================================================Delphi====
unit Unit1;

interface

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

const
DOMAIN_LEN=45;
MAILBOX_LEN=30;
FULLNAME_LEN=30;
MAILDIR_LEN=90;
PASSWORD_LEN=20;
MAXMESSAGECOUNT_LEN=4;
MAXDISKSPACE_LEN=6;
EMAIL_LEN=MAILBOX_LEN+DOMAIN_LEN+1;
FWDADDR_LEN=256;
FWDHOST_LEN=64;
FWDSENDAS_LEN=128;
FWDPORT_LEN=8;
USERDEFINED_LEN=256;
MBXFORMAT_LEN=32;
AUTORESPEXCLUDE_LEN=5001;

type
MD_UserInfo=packed record
Email:array[0..EMAIL_LEN+0] of char;
Mailbox:array[0..MAILBOX_LEN+0] of char;
Domain:array[0..DOMAIN_LEN+0] of char;
FullName:array[0..FULLNAME_LEN+0] of char;
MailDir:array[0..MAILDIR_LEN+0] of char;
Password:array[0..PASSWORD_LEN+0] of char;
AutoDecode:boolean;
IsForwarding:boolean;
AllowAccess:boolean;
AllowChangeViaEmail:boolean;
KeepForwardedMail:boolean;
HideFromEveryone:boolean;
EncryptMail:boolean;
ApplyQuotas:boolean;
EnableMultiPOP:boolean;
LocalOnly:boolean;
MaxMessageCount:integer;
MaxDiskSpace:integer;
WebConfig:integer;
FwdAddress:array[0..FWDADDR_LEN+0] of char;
FwdHost:array[0..FWDHOST_LEN+0] of char;
FwdSendAs:array[0..FWDSENDAS_LEN+0] of char;
FwdPort:array[0..FWDPORT_LEN+0] of char;
NTAccount:array[0..MAILBOX_LEN+0] of char;
MailFormat:array[0..MBXFORMAT_LEN+0] of char;
AutoRespScript:array[0..MAX_PATH+0] of char;
AutoRespProcess:array[0..MAX_PATH+0] of char;
AutoRespExclude:array[0..AUTORESPEXCLUDE_LEN+0] of char;
AddToList:array[0..EMAIL_LEN+0] of char;
RemoveFromList:array[0..EMAIL_LEN+0] of char;
PassMessageToProcess:boolean;
MaxUIDLCount:integer;
MaxMessageSize:integer;
UserDefined:array[0..USERDEFINED_LEN+0] of char;
end;


TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

function MD_AddUser(UserInfo:MD_UserInfo;Flags:integer):integer;stdcall;
external 'C:\MDaemon\App\MDUser.dll';

procedure MD_InitUserInfo(UserInfo:MD_UserInfo);stdcall;
external 'C:\MDaemon\App\MDUser.dll';

implementation

{$R *.DFM}

procedure let(var a:array of char;b:string);
var
i:integer;
begin
//setlength(a,length(b)-1);
for i:=0 to length(b)-1 do
a[i]:=b[i+1];
end;

procedure TForm1.Button1Click(Sender: TObject);
var
UserInfo:MD_UserInfo;
ret:integer;
begin
// Copy new account defaults into structure
MD_InitUserInfo(UserInfo);

// copy data into UserInfo members
let(UserInfo.FullName,Edit1.Text);
let(UserInfo.Domain,Edit2.Text);
let(UserInfo.Mailbox,Edit3.Text);
let(UserInfo.MailDir,Edit4.Text);

ret:=MD_AddUser(UserInfo, 0);
showmessage(inttostr(ret));
end;

end.

可是一调 MD_InitUserInfo(UserInfo);
就出错。问题出在哪啊?
内容概要:本文研究了一种针对四机并联孤岛微电网的协同控制策略,通过集成DoS攻击模拟、分布式二次控制、下垂控制与事件触发式负荷控制,旨在实现微电网在遭受网络安全威胁等异常工况下的电压与频率恢复以及有功/无功功率的精确共享分配。基于Simulink平台构建了完整的微电网仿真系统,包含多台分布式发电单元(DG),采用下垂控制实现无需通信的功率自主分配,并引入分布式二次控制以补偿由下垂特性引起的电压和频率偏差,从而提升电能质量。为进一步降低通信负担并提高系统效率,设计了事件触发机制,仅在必要时刻进行信息交互。研究重点在于多时间尺度下的协同控制架构设计,全面验证了该策略在正常运行与遭受DoS攻击等扰动情形下的稳定性、鲁棒性与恢复能力。; 适合人群:具备电力系统、自动控制理论基础,熟悉Simulink/Matlab仿真工具,从事微电网、分布式能源、智能电网及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究孤岛微电网中电压频率恢复与功率均分的多时间尺度协同控制机制;②分析DoS网络攻击对微电网控制性能的影响及其应对策略;③掌握事件触发控制在减少通信开销中的实际应用方法;④复现并拓展具备网络安全防护能力的高级微电网控制算法仿真模型。; 阅读建议:此资源以Simulink仿真实现为核心,建议读者结合现代控制理论与网络安全知识,逐步搭建系统模型,重点关注控制器参数整定、事件触发阈值设计及DoS攻击注入方式,通过对比实验深入理解控制策略的有效性与鲁棒性。

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧