activex调DLL在网页上调用.
By:Roy.LiuLast updated:2009-11-22
在ACTIVEX中调用DELPHI 写的DLL, 网上有很多说要在DRP文件中第一个必须use shareMem 单元。这样就不会报错,其实不然,在调用时,不会报错,在关闭应用程序时,就报错了,所以没有根本解决问题。
其实是可以不用use shareMem 的,即使有函数返回值,如果返回值是string ,将它改成pchar 吧。这样通用性强很多的。
其实调用早就成功的,很简单的,但我一直忽略了 pchar 这个东西,导致调用到最后出异常,虽然结果是对的,但用户看到就不好了。
比如:
library MyUserLogin;
{测试 java 调用 delphi的 dll 方法及过程
lzs
2009-11-16
}
uses
SysUtils,
Classes;
{$R *.res}
function GetMyInfo():pchar;stdcall;
begin
result:='OOOOOO--中文';
end;
exports
GetMyInfo;
begin
end.
在activex中动态调用:
先申明
TGetInfo =function():pchar; stdcall;
procedure TActiveFormX.Button2Click(Sender: TObject);
var
mystr: pchar;
Func: TGetInfo;
begin
//======调用DLL获取信息=================
try
myHandle:=loadLibrary('MyUserLogin.dll');
if myHandle<>0 then
begin
showmessage('you dll');
@Func := GetProcAddress(myHandle, pchar('GetMyInfo') );
// if assigned(@Func) then
mystr:=Func();
showmessage(pchar(mystr));
end;
finally
showmessage('begin free library');
FreeLibrary(myHandle);
end;
showmessage('55555');
//======END=============================
end;
其实是可以不用use shareMem 的,即使有函数返回值,如果返回值是string ,将它改成pchar 吧。这样通用性强很多的。
其实调用早就成功的,很简单的,但我一直忽略了 pchar 这个东西,导致调用到最后出异常,虽然结果是对的,但用户看到就不好了。
比如:
library MyUserLogin;
{测试 java 调用 delphi的 dll 方法及过程
lzs
2009-11-16
}
uses
SysUtils,
Classes;
{$R *.res}
function GetMyInfo():pchar;stdcall;
begin
result:='OOOOOO--中文';
end;
exports
GetMyInfo;
begin
end.
在activex中动态调用:
先申明
TGetInfo =function():pchar; stdcall;
procedure TActiveFormX.Button2Click(Sender: TObject);
var
mystr: pchar;
Func: TGetInfo;
begin
//======调用DLL获取信息=================
try
myHandle:=loadLibrary('MyUserLogin.dll');
if myHandle<>0 then
begin
showmessage('you dll');
@Func := GetProcAddress(myHandle, pchar('GetMyInfo') );
// if assigned(@Func) then
mystr:=Func();
showmessage(pchar(mystr));
end;
finally
showmessage('begin free library');
FreeLibrary(myHandle);
end;
showmessage('55555');
//======END=============================
end;
From:一号门
Previous:java 中直接调用EXCEL,WORD打开指定文件
COMMENTS