社区
语言基础/算法/系统设计
帖子详情
高手们,请帮个忙吧!!!(关于dll的问题)
etupo
2003-04-25 01:38:00
我这里有个用delphi编写的dll动态链接库,我想通过asp调用它,不过这个dll是不可以
regsvr32的,我想了很多办法都不能解决,最后决定用VB重做一个dll,功能跟它一样,不过我对用vb编写dll不是很懂,简单的略之一二,请问谁能帮我写一个,我这里有它的原代码(delphi),该dll的功能不复杂,只有对字符串进行加密、解密的功能,请问谁能帮我呢?急!!!!!!!!
...全文
132
8
打赏
收藏
高手们,请帮个忙吧!!!(关于dll的问题)
我这里有个用delphi编写的dll动态链接库,我想通过asp调用它,不过这个dll是不可以 regsvr32的,我想了很多办法都不能解决,最后决定用VB重做一个dll,功能跟它一样,不过我对用vb编写dll不是很懂,简单的略之一二,请问谁能帮我写一个,我这里有它的原代码(delphi),该dll的功能不复杂,只有对字符串进行加密、解密的功能,请问谁能帮我呢?急!!!!!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qwertyasd
2003-04-26
打赏
举报
回复
web打印组件要求是在一次为某单位开发信息管理系统中被提及的,这个系统中的一些票据需要打印。这样,如何对这些票据进行套打成了我们必须解决的问题。
要在客户端打印一些用户要求的票据或其它的文字或图片资料,有两种方式:一种是利用delphi的active form来生成客户端的界面,由浏览器下载安装,并在客户端运行。(这种方式在开发多后台数据库中,较为常用。在国内许多新版本的财务软件都采用了这种方法,其缺点是对开发人员的要求太高),另一种是开发一个组件在客户端安装,然后,由服务器端来生成vbscript脚本,在客户端运行、创建相应的组件对象;利用组件对象来进行打印操作。(这种方法只要客户端的com组件开发完成,使用者只要熟悉vbscript或javascript脚本语言就可能方便的调用)。本文我们主要讨论第二种方式。
三、实现
首先、运行delphi 5.0;选择file菜单中的new,在弹出的对话框中选择activex页,选择activex library创建activex库.然后,再往新建的库中加入一个automation object,操作步骤同上。在automation object wizard对话框中填入组件名prttest3;单击ok。
然后、在弹出的prttest3.tlb窗口中,选择iprttest3。单击右键新增一个isinit的property,类型为long。再继续增加如下5个method:
procedure prtcustompage(pagewidth: integer; pageheight: integer);
safecall;
procedure prtstart; safecall;
procedure prtnewpage; safecall;
procedure prtend; safecall;
procedure prtdrawline(x1: integer; y1: integer; x2: integer; y2:
integer; linewidth: integer); safecall;
procedure prtsetfont(const fontname: widestring; fontsize:
integer); safecall;
procedure prttextrect(valign: integer; halign: integer; rectleft: integer; recttop: integer;rectright: integer; rectbottom:
integer; const printstring: widestring); safecall;
它们意义是:prtcustompage 用来设置自定义纸张.传入的参数自定义纸张的宽度和高度。
prtstart 用来初始化打印机。如果初始化成功,则将属性isinit置为真,反之则为假。
prtnewpage 用来使打印机换页。
prtend 结束打印任务。
prtdrawline 用来在页面上绘制一条线。(x1,y1)为起始点.(x2,y2)为终止点。linewidth为打印线的宽度。
prtsetfont 用来设置打印的字体名及大小。
prttextrect 用来指定的方框内的输出的指定的字符串。
四、调用
在脚本中调用这个组件的方法:
(1)、利用createobject函数创建一个打印对象。
(2)、调用prtcustompage来指定定制的纸张的大小(以0.1毫米为基本单位)。如果,不是定制的纸张则不需要调用这个过程(即以打印默认的纸张大小进行打印)。
(3)、调用prtstart进行打印机的初始化工作。如果打印机初始化成功,则会将isinit属性置为真,表示初始化成功;否则,表示打印机正在忙或有别的应用程序正在使用打印机,初始化不能成功。
(4)、判断isinit标志。如果为真,则继续执行打印段。
(5)、执行打印段。可以在利用打印机画线、和在指定位置输出文字。
(注:在组件接中的所有位置单位都是0.1毫米。例如.prtobject.prtdrawlien 0,0,1000,1000 表示从左上角(0,0)毫米到右下角(100,100)毫米处,画一条直线)
(6)、利用prtend结束打印任务。
〈 script language="vbscript">
〈 !--
sub testprtobject
dim prtobject
set prtobject=createobject("prttest3.prttest3")
prtobject.prtcustompage 1000,1000
prtobject.prtstart
if prtobject.isinit then
prtobject.prtdrawline 0,0,1000,1000,1
prtobject.prtdrawline 500,700,1000,1000,1
prtobject.prtsetfont "宋体",16
prtobject.prttextrect 2,2,0,0,1000,500,"web应用程序打印测试"
prtobject.prtend
end if
set prtobject=nothing
end sub
testprtobject()
//-->
〈 /script>
五、代码解析
在这个组件中,我们所要解决的几个问题:
(1)、在delphi的应用程序设计中自定义打印纸张的设置,delphi中自身带了一个quickreport的打印设计程序,这个程序在一定的程度上方便了打印的设计,但这个设计程序对于自定义纸张的设定和打印支持却不是很好。因此,在这个组件中我们采用手工代码来设定自定义纸张大小。
function tprttest3.initprintpaper:boolean;
var
device:array [0..cchdevicename-1] of char;
driver:array [0..(max_path-1)] of char;
port:array [0..32] of char;
hdmode:thandle;
pdmode:pdevmode;
begin
result:=true;
if prtiscustompaper then
begin
{设置打印机段}
printer.getprinter(device,driver,port,hdmode);
if hdmode〈>0 then begin
try
pdmode:=globallock(hdmode);
if pdmode〈>nil then begin
//设定打印的方向为纵向或横向
if paperorientation〈>0 then
pdmode^.dmorientation:=dmorient_landscape
else pdmode^.dmorientation:=dmorient_portrait;
//设置拷贝份数为1份.
pdmode^.dmcopies:=1;
//以毫米为单位的纸张大小.
pdmode^.dmpaperlength:= paperheight*10;
pdmode^.dmpaperwidth:=paperwidth*10;
//设置纸张类型为用户自定义.
pdmode^.dmpapersize:=dmpaper_user;
end;
globalunlock(hdmode);
printer.setprinter(device,driver,port,hdmode);
except
result:=false;
end;
end else begin
result:=false;
end;
end;
end;
(2)、打印位置的确定:由于组件是以图形方式进行打印,这就使得我们可以精确指向打印文件的输出位置,以便于进行对某些票据的套打。但这样就产生一个问题,我们是以打印的像素位置指定输入位置,还是以打印尺寸来指定位置。显然,利用像素来输出打印位置,对于编制程序来说是比较方便的。但由于一般用户对像素的概念并不理解,因此会带来使用上的困难;而且每一种打印机的分辩率是不一样的,因此,会出现在不同打印机上打印的效果不一样的问题。而以打印尺寸来指定位置并在程序中妥善加以处理就不会有上面的问题。具体的处理方法是,由用户输入尺寸位置。然后,在打印时,首先取得当前打印机的分辩率(注意:分辨率是以每英寸多少像素为单位的),再计算得出实际输入的像素位置后进行打印,这样就可以使得组件更加实用,而且,保持打印幅面的一致。具体的函数如下。
function tprttest3.mmtoprintpixel(inputpoint:tpoint):tpoint;
begin
result.x:=mmtoprintpixelx(inputpoint.x);
result.y:=mmtoprintpixely(inputpoint.y);
end;
function tprttest3.mmtoprintpixelx(inputx:integer):integer;
begin
if queryprintlogpixel then
begin
pddix:=getdevicecaps(printer.handle,logpixelsx);
pddiy:=getdevicecaps(printer.handle,logpixelsy);
queryprintlogpixel:=false;
end;
result:=trunc(inputx/253.8*pddix+0.5);
end;
function tprttest3.mmtoprintpixely(inputy:integer):integer;
begin
if queryprintlogpixel then
begin
pddix:=getdevicecaps(printer.handle,logpixelsx);
pddiy:=getdevicecaps(printer.handle,logpixelsy);
queryprintlogpixel:=false;
end;
result:=trunc(inputy/253.8*pddiy+0.5);
end;
getdevicecaps:为windows系统中取得指定设备信息的函数。函数的原型如下
int getdevicecaps(
hdc hdc, // 设置的句柄
int nindex // 查询的设备参数。
);
其中,hdc为想要查询的打印机的句柄,logpixelsx、logpixelsy表示要查询的内容是打印机横向、纵向的每英寸的像素点数。
六、组件的注册
如果是在delphi编写了这个组件的,则可以选择run菜单下的register activex server来进行这个组件的注册。
对于不开发机器的注册则可使用:点击“开始”→“运行”;在运行对话框中输入以下命令:
regsvr32 〈 文件名 > 注册一个activex控件
regsvr32 /u 〈 文件名 > 解除某activex控件的注册
七、其它应用
组件的扩展:以上列出的仅仅是编写这个组件的框架,功能比较有限。根据需要我们还可以添加上画圆、椭圆,矩形,甚至图片等功能。有兴趣的读者就请自行添加。
因为,组件是采用com的方式运行,所以,我们还在window script hosts(wsh)中应用这个组件,结合wsh原有(通过ado对象)访问外部数据库的能力,就可能做出在windows下功能强大的wsh的脚本程序。
myling
2003-04-25
打赏
举报
回复
按照ehom的方法自己试试吧
activex和dll差不多的,不过需要注册就是了
呵呵
etupo
2003-04-25
打赏
举报
回复
ehom:您能帮我看一下吗,我对这方面的知识不懂,对delphi更不了解了!!
ehom
2003-04-25
打赏
举报
回复
google
http://www.cnread.net/cnread1/dnwl/cxsj/delphi/ztwd/wlyy/025.htm
http://tech.sina.com.cn/c/2001-07-31/4790.html
http://www.wushuang.net/article/upfile.htm
...
ehom
2003-04-25
打赏
举报
回复
New->Dll Wizard
=>
ActiveX->ActiveX Library
基本概念还是需要搞清楚的
etupo
2003-04-25
打赏
举报
回复
你能够帮我把这个用delphi编写的dll改成ACTIVEX吗,这样我就可以通过asp调用里面的两个函数了,我对delphi不熟:
本模块要从EncryptDll.dll动态链结库里调用以入函数
procedure DllEncryptDes( FStr,FKey:Pchar;ReturnStr:Pchar);stdcall // 加密函数
FStr:需加密的字符串,FKey:密钥字符串,ReturnStr:加密后返回的字符串
procedure DllCrackDes(FPassWrod,FKey:Pchar;ReturnStr:Pchar);stdcall; //解密函数
FPassWrod:需解密的字符串,FKey:密钥字符串,ReturnStr:解密后返回的字符串
blueshu
2003-04-25
打赏
举报
回复
应都能调用的,查查你调用的方法吧
参数是否正确。。
zleeway
2003-04-25
打赏
举报
回复
把你的DLL改写成为ActiveX或AutoObject
AI如何帮你解决
DLL
文件缺失
问题
?
最近在Windows系统上运行某些程序时,经常会遇到"找不到API-MS-WIN-CORE-PATH-L1-1-0.
DLL
"这样的错误提示。它的AI辅助功能可以帮助快速解决开发中遇到的各种
问题
,特别是对于Windows系统编程这类需要调用特定API的场景,AI能准确提供相关代码示例和解决方案。总的来说,AI技术正在改变我们解决系统
问题
的方式,让复杂的底层操作变得简单易用。通过合理利用AI辅助开发,我们可以创建出更智能、更友好的系统工具,帮助普通用户轻松应对各种技术
问题
。在开发这类系统工具时,我发现。
AI如何帮你解决Windows
DLL
缺失
问题
必须验证
DLL
文件数字签名,避免安全风险处理系统目录需要管理员权限不同Windows版本存在细微差异需要兼容定期更新
DLL
数据库保持修复能力这个项目让我深刻体会到,合理运用InsCode(快马)平台的AI辅助开发能力,可以大幅降低系统工具开发门槛。平台提供的智能代码补全和实时错误检查,让原本复杂的系统级编程变得轻松许多。对于想尝试类似项目的开发者,建议先从简单的文件校验功能入手,逐步增加智能修复模块。记住:系统工具开发最重要的是稳定性和安全性,每步操作都要有回滚机制。
C#中加载
dll
的
问题
最近在做C#上进行H264解码的网络摄像头,通过各种折腾,还是没法解决,无奈之下只好使用在C#下加载ffmpeg的动态库进行,在加载的时候说不遇到
问题
那是不可能的。 下面就我遇到的
问题
和解决方案进行发表: 1.加载方法 很多人都想着通过右键引用的方法进行
dll
的加载,当然那是简便的方法,不过对于用C++编译的动态库貌似这方法行不通,往往会提示“未能添加XXX.
dll
的引用。
请
jupyter notebook 出现‘内核正在启动
请
等待’和‘
DLL
load failed: 找不到指定的模块’的
问题
解决
jupyter notebook 出现‘内核正在启动
请
等待’和‘
DLL
load failed: 找不到指定的模块’的
问题
解决
构网型变流器正负序阻抗解耦特性及扫频验证研究(Simulink仿真实现)
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅读建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合
问题
的理解。
语言基础/算法/系统设计
16,741
社区成员
33,233
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章