delphi编写dll遇到的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi编写dll遇到的问题相关的知识,希望对你有一定的参考价值。

library utf8string;

uses
System;

$R *.RES

function UTF8STRS(str:pchar): pchar; stdcall;export;
begin
Result :=pchar(UTF8Encode(str));
end;

exports
UTF8STRS;

begin
end.

我用这段代码生成了一个dll,供其他程序调用,编译没有问题,但是调用的时候总是出现内存错误!
哪位兄弟能帮忙解决一下
是供autoit3调用的
2楼和3楼的都能编译
但是autoit3调用的时候都是内存错误

主要是dll调用时内存在返回之前已经释放掉了。可以考虑使用全局变量或者函数中导入变量参数。

另外

uses
System;

是不需要的

function UTF8STRS(str:pchar): pchar; stdcall;export;

而后面又
exports
UTF8STRS;

多余了

最主要出错原因还是内存在返回之前已经释放掉了

唉!!!还是要写出源代码给你啊?

library utf8string;

$R *.RES

var
WGS:system.utf8string;

function UTF8STRS(str:pchar):pchar; stdcall;
begin
WGS:=UTF8Encode(str);
Result:=pchar(WGS);
end;

exports
UTF8STRS;

begin
end.
参考技术A 你是什么语言调用啊,如果是C++肯定内存错误的,dll里是不能用string类型的要用pchar string是delphi自有的变量类型,c++里是没有string类型的

library utf8string;

uses
ShareMem,
System;

$R *.RES

function UTF8STRS(AStr:PWideChar):PChar;stdcall;//要是delphi2010的话PChar要改为PAnsiChar
var
sInTmp :WideString ;
sOutTmp:AnsiString;
begin
sInTmp := AStr;
sOutTmp :=UTF8Encode(sInTmp);
StrPCopy(Result,sOutTmp);
end;

exports
UTF8STRS;

begin
end.
参考技术B library utf8string;

uses
ShareMem,
System;

$R *.RES

function UTF8STRS(str:Pchar):PChar;stdcall;
var
sTmp :String ;
begin
sTmp := str;
sTmp :=UTF8Encode(sTmp );
StrPCopy(Result,sTmp);
end;

exports
UTF8STRS;

begin
end.

使用 Delphi 编写 Windows 集群资源 DLL

【中文标题】使用 Delphi 编写 Windows 集群资源 DLL【英文标题】:Programming Windows Cluster resource DLLs using Delphi 【发布时间】:2010-04-26 12:41:38 【问题描述】:

我想知道是否有办法在 Delphi 中为 Windows 集群编写资源 DLL。我想写一个观察集群状态变化的程序。

从MSDN API reference 来看,所有相关函数都位于 ClusAPI.h 和 ResAPI.h 头文件中,但不幸的是,它们似乎还没有被移植,而且 HeaderConv 似乎在它们上失败了。

有没有人做过这种事情的经验?

【问题讨论】:

【参考方案1】:

这是一个非常面向 C 的 API,具有强制性的 Dll 入口点、回调函数指针表和二进制数据块。我已经能够用 C++/CLI 互操作层包装 C#/.NET 库,但这绝对不是微不足道的。

【讨论】:

【参考方案2】:

这需要手动将 C 标头转换为 Pascal 代码。如果 API 处理指针,您就不必翻译任何结构......这将使执行翻译变得相对简单,因为您只需要翻译函数声明本身。如果它传递结构(而不​​是指向那里的指针),则必须将所有这些结构转换为 Delphi 记录(或适当的打包记录)。结构翻译更耗时。

抱歉,我无法提供“即时解决方案”,但根据我提供的信息,应该会有所帮助(如果您还不知道的话)。

【讨论】:

以上是关于delphi编写dll遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

从Delphi调用C ++ DLL时发生访问冲突

Delphi写的DLL回调C#

Delphi 2009,带有 Oracle 的 DbExpress:无法加载 oci.dll

将非托管 dll 的 Delphi 代码转换为 C#

Delphi7调用DelphiXE编写的DLL问题

使用 Delphi 编写 Windows 集群资源 DLL