delphi 动态连接库调用exe中的函数,时出现access violation at 0x0047a214 :read of address 0x0047

o0Bad_Boy0o 2010-05-10 10:32:21
exe中的代码
unit Compile;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls, ExtCtrls, Menus, ActnList;
type
TForm1 = class(TForm)
.....
end;
function XMLSaveInfo:string;
function XMLLoadInfo(LoadStr :String):Boolean ;

exports
XMLSaveInfo index 0 name 'XMLSaveInfo',
XMLLoadInfo index 1 name 'XMLLoadInfo';


测试调用该EXE代码
unit Unit1;

interface

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

type
TXMLSaveInfo = function :string; //定义
TForm1 = class(TForm)
。。。。
end;

procedure TForm1.Button1Click(Sender: TObject);
var
lib : THandle;
XMLSaveInfo :TXMLSaveInfo;
begin
try
FilName :=APath;

lib :=LoadLibrary('Compli.exe');
if lib = 0 then
ShowMessage('Cannot load the module')
else
begin
@XMLSaveInfo := GetProcAddress(lib,'XMLSaveInfo');
if @XMLSaveInfo =nil then
ShowMessage('Cannot GetProcAddress')
else
begin
memo1.lines.add(TXMLSaveInfo(@XMLSaveInfo));
end;
FreeLibrary(lib);
end;
except
on e:Exception do
showmessage(e.Message);

end;

end;

问题是调用到
memo1.lines.add(TXMLSaveInfo(@XMLSaveInfo));
出现 access violation at 0x0047a214 :read of address 0x0047a214 .. 这个问题该如何解决
等待高手。。。。希望讲的详细点(谢谢)
...全文
236 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuang_bx 2010-05-20
  • 打赏
  • 举报
回复
string;
改成PChar类型
SavePath设置在函数里面赋值试试
o0Bad_Boy0o 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tom2427 的回复:]
引用 3 楼 o0bad_boy0o 的回复:
我检查过了。。在EXE程序里面调用是XMLSaveInfo。不会有什么问题!
function XMLSaveInfo: ShortString;
var
AXML : Tstrings;
begin
AXML := TStringList.Create;
AXML.LoadFromFile(SavePath);
// Result ……
[/Quote]

这个函数的作用就是 单外部调用的时候 对XML文件的操作 。
所以给了他一个PATH的值。。外部调用的时候 SavePath是在exe 程序create的时候就已经赋值给SavePath
sanguomi 2010-05-10
  • 打赏
  • 举报
回复
在EXE里调和 外部调不同的
o0Bad_Boy0o 2010-05-10
  • 打赏
  • 举报
回复
我检查过了。。在EXE程序里面调用是XMLSaveInfo。不会有什么问题!
function XMLSaveInfo: ShortString;
var
AXML : Tstrings;
begin
AXML := TStringList.Create;
AXML.LoadFromFile(SavePath);
// Result :=TStringList.Create;
Result :=sdUtf8ToAnsi(AXML.Text);
end;
sanguomi 2010-05-10
  • 打赏
  • 举报
回复
估计是你 函数里 string 的问题
应该是 'XMLSaveInfo'函数的问题,调用没问题
o0Bad_Boy0o 2010-05-10
  • 打赏
  • 举报
回复
在线等待中……
这问题很难吗!尽然没人来回答1
一直等待中!
tom2427 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 o0bad_boy0o 的回复:]
我检查过了。。在EXE程序里面调用是XMLSaveInfo。不会有什么问题!
function XMLSaveInfo: ShortString;
var
AXML : Tstrings;
begin
AXML := TStringList.Create;
AXML.LoadFromFile(SavePath);
// Result :=TStringList.Cre……
[/Quote]

SavePath是什么?外部调用的时候有赋值吗?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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