我是Delphi新手,现请教一个调用DLL的问题.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我是Delphi新手,现请教一个调用DLL的问题.相关的知识,希望对你有一定的参考价值。

我是Delphi新手,现有一急手问题,望各位大虾帮忙.

需要用Delphi调用动态库Encoder.dll里的一个转换函数,函数是:
void __stdcall Encode(unsigned char *src,int len,unsigned char *dest);
参数说明:
src: 需转换的字符串指针,
len:需要转换的字符串的长度,
dest:返回通过转换后的字符串指针

请问各位大虾,如何实现调用并获得返回值,请详解,谢谢.
还是不行,我把代码贴出来,大家帮我看看吧.

unit MainFrm;

interface

uses

type

private

public

end;

var
MainForm: TMainForm;

procedure Encode(src:pchar;len:integer;dest:pchar); external 'Encoder.dll';

implementation

$R *.DFM

procedure TMainForm.Button1Click(Sender: TObject);
var sms_message:pchar;
begin
Encode('中华人民共和国', 14,sms_message);
showmessage(sms_message);
end;

执行会报错"Access violation at address … in module ‘Encoder.dll’,…."

yeye55,用了你的方法,还是同样的报错.

方便的话我把DLL发出来,大家帮我看下.

在接口部分定义
即在interface
type 下
TEnCode = function(src:Pchar;len :integer;dest:Pchar);stdcall;

var
Encode:TEncode;
在实现体里使用就可以了
装载插件
调用接口

LoadLibrary
GetProcAddress
参考技术A 在接口部分写上:
function void __stdcall Encode(unsigned char *src,int len,unsigned char *dest);stdcall;
external 'Encoder.dll';
然后直接在执行部分调用这个函数。
参考技术B procedure TMainForm.Button1Click(Sender: TObject);
var sms_message:pchar;
begin
GetMem(sms_message,100);
FillChar(sms_message^,100,0);
Encode('中华人民共和国', 14,sms_message);
showmessage(sms_message);
FreeMem(sms_message);
end;
参考技术C procedure Encode(src:PChar; len: Integer; dest: PChar);stdcall; external 'Encoder.dll'

以上是关于我是Delphi新手,现请教一个调用DLL的问题.的主要内容,如果未能解决你的问题,请参考以下文章

关于delphi中动态调用dll时出现的问题

请教 如何用DELPHI生成DLL 封装数据库连接

尝试从 VS2013 C# 程序调用 DELPHI XE2 DLL 时出错

从 Delphi“访问冲突”正确调用 DLL 中的 C++ 函数

delphi编写dll遇到的问题

我是JAVA新手,向大家请教一个问题.