咨询一个调用 dll的问题(100分)

  • 主题发起人 主题发起人 sl98_1
  • 开始时间 开始时间
S

sl98_1

Unregistered / Unconfirmed
GUEST, unregistred user!
5) 调用函数原型:
long OltpTransData(unsigned long msgType,unsigned long packageType,
unsigned long packageLength,char *str,LPTSTR com);
I. msgType :业务请求类型;具体数值参见参数数值表
II. packageType :数据解析格式类型,系统重组数据时使用;具体数值参见参数数值表
III. packageLength :数据串的长度;需要参见参数数值表
IV. str :数据串;调用时,通过数据串传入参数;函数返回时,数据串中包含返回的数据
V. com :数据请求串口(根据读卡器插口位置,本参数可 以取值:‘com1’,‘com2’)


我写的代码如下
implementation
function OltpTransData(msgType,packageType,packageLength :longword ;str :STRING ;com :string):longint ;stdcall ;external 'OltpTransIc06.dll' name 'OltpTransData';
{$R *.dfm}
function TForm1.Space(vNum: Integer): string; //传入参数是你要的空格数量,整型值
var
i: Integer;
begin
Result := ''; //这里的两个引号之间没有空格,要连着写
for i := 1 to vNum do
begin
Result := Result + ' '; //这里的两个引号之间有一个空格,不要多写
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var fh :longint;
str,com : string;
begin
STR:=str+Space(255);
com:=TRIM(EDIT1.Text);
fh:=OltpTransData(1001,101,255,str,'com1');
if fh=0 then showmessage(str)
else showmessage(inttostr(fh));
但是执行结果报错 什么原因
就算成功也没有返回值 是不是我其中 str 这个变量应该用指针?

C#这样写 也报错
[DllImport("OltpTransIc06.dll",EntryPoint="OltpTransData",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern int OltpTransData(uint msgType,uint packageType,uint packageLength,ref string str,string com);
什么原因
 
老套问题: 调用DLL时如何传递string,自己搜索下,这个地方你不应该用string,要用pchar!!!!
 
能不能具体点 呵呵
 
还有运行时 提示这个错误 什么原因
External exception c0000008
 
改改声明函数:
function OltpTransData(msgType,packageType,packageLength :longword ;str :PCHAR ;com :PCHAR):longint ;stdcall ;external 'OltpTransIc06.dll' name 'OltpTransData';
 
hongxing_dl
我用了你的定义方法
地下的传得参数是不是用 @
但是执行好像不对
 
procedure TForm1.Button1Click(Sender: TObject);
var fh :longint;
str,com : string;
begin
STR:=str+Space(255);
com:=TRIM(EDIT1.Text);
fh:=OltpTransData(1001,101,255,pchar(str),pchar(com));
if fh=0 then showmessage(str)
else showmessage(inttostr(fh));


另外说两句,STR是个保留字,建议楼主最好少用,可以定义诸如str1,str2...strn..
 
在编译状态下运行提示
External exception c0000008
但是单独运行 不报错 什么原因
 
帮我分析一下 什么原因错误 呵呵
 
二楼已答
 
结果已经正确 就是不明白为什么
在编译状态下运行提示
External exception c0000008
但是单独运行 不报错 什么原因
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
816
import
I
后退
顶部