请叫高手(100分)

  • 主题发起人 主题发起人 xiaoyonghero
  • 开始时间 开始时间
X

xiaoyonghero

Unregistered / Unconfirmed
GUEST, unregistred user!
我在delphi中使用DLL进行程序开发过程中,出现如下错误:
运行的过程中没有问题,退出程序时出现 project pcsdll.exe raised ecxeption class
einvalidpionter with message'invalid pointer operation',process stopped,use step or
run to continue (在调试的情况下)
最后出现另外一个对话框出现的错误信息:runtime error 217 at 00413e14
我引用的DLL是采用PCHAR 传替参数的,已经引用了sharemem
请问这是什么错误,该怎么解决,请给我源代码
 
这是一个字符串引起的错误,原因在dll处,把你的过程或函数名
写出来看看
 
DLL的源程序如下:

uses
sharemem,
Classes,
SysUtils;

{$R *.res}
function showxy(strxy:string):pchar;stdcall;export;
begin
showxy:=pchar(strxy);
end;
exports
showxy name 'showxy';
begin
end.

调用的源程序如下:
var
hd:THandle;
showxy:tshowxy;
s:PChar;
begin
hd:=LoadLibrary('pdll.dll');
if hd<>0 then
begin
ShowMessage('1212');
@showxy:=GetProcAddress(hd,'showxy');
if @showxy<>nil then
begin
s:=showxy('sdfs');
showmessage(string(s));
end
else
begin
end;
FreeLibrary(hd);
end;
end;
请看一看是什么问题?
 
你的调用DLL的工程中第一个引用的单元也必须是sharemem
另外,为遵循windows的DLL调用规则,最好不要用string类型传递参数,
而应该全部使用PChar类型,这样能减少错误发生的可能,并使程序用通用性

另外,你的tshowxy是怎么定义的?有没有加上stdcall?
 
尽量不要传递 String 类型的数据,可以仅仅传递一个指针就可以了
 
我调用程序的定义
uses
sharemem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
tshowxy=function(strxy:pchar):PChar ;stdcall;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

请看一看有什么问题吗?
 
我现在将所有的参数改为了PCHAR还是出现同样的错误信息,请问该怎么解决这个问题
 
我在win98下运行没有发现问题,win2k没有试验过,你的操作系统是什么?
 
回复 kerbcurb
很感谢你的关心,能够在win2k下运行看一看问题怎么解决吗?
 
sharemem都必须在工程文件的uses
 
多人接受答案了。
 
后退
顶部