请教这个.

paranoia190 2006-12-07 02:51:34
DLL的INTERFACE问题.
DLL文件:
1.主体部分
type
TA = class(TInterfacedObject,IA)
private
FA : PChar;
Public
Constructor Create(value : pchar);
Function GetData: PChar;stdcall;
end;

implementation

Constructor Ta.Create(Value : PChar);
begin
FA := Value;
Inherited create;
end;

Function TA.GetData: pchar;
begin
Result := FA;
end;

接口部分:

type
IA = interface
['{C143B447-4F9D-475A-B33B-182916F05DEC}']
Function GetData: PChar;stdcall;
end;

输出部分:
function GetA(value : PChar) : IA;export;
begin
Result := TA.Create(value);
end;

exports
GetA;



EXE调用DLL部分
var
HD : Cardinal;
GetTa : function(value : PChar) : IA;
tmp : IA;
begin
try
HD := LoadLibrary('Project1.Dll');
if hd > 32 then
begin
GetTa := GetProcAddress(HD,'GetA');
tmp := GetTa(PChar('aaa'));
memo1.Lines.Add(StrPas(tmp.GetData));
end
else
memo1.Lines.Add('DLL Load Error~')
finally
FreeLibrary(HD);
end;

调用的时结果正常返回.但报错误..
...全文
206 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
paranoia190 2006-12-09
  • 打赏
  • 举报
回复
再问你个问题.我不是很明白.
adoconnection.connected := true
数据库中连接多一条.
adoconnection.connected := false;
数据库中连接未断开

adoconnection.free;连接断开..
为什么.这个想不明白.

paranoia190 2006-12-09
  • 打赏
  • 举报
回复
哈哈.我前几天就想到了...呵呵
还是谢谢你.
王集鹄 2006-12-08
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
HD: Cardinal;
GetTa: function(Value: PChar): IA;
tmp: IA;
begin
HD := LoadLibrary('InterfaceLib.dll');
try
if hd > 32 then
begin
GetTa := GetProcAddress(HD,'GetA');
tmp := GetTa(PChar('aaa'));
Memo1.Lines.Add(StrPas(tmp.GetData));
tmp := nil; // <<<<< 完全蒙的,道理你自己想吧
end else Memo1.Lines.Add('DLL Load Error~')
finally
FreeLibrary(HD);
end;
end;
paranoia190 2006-12-07
  • 打赏
  • 举报
回复
靠.顶不住了/
paranoia190 2006-12-07
  • 打赏
  • 举报
回复
我再顶啊!
paranoia190 2006-12-07
  • 打赏
  • 举报
回复
我顶啊.

5,392

社区成员

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

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