简单调用动态链接库出错
//生成动态链接库单元
library Example;
uses
SysUtils,
Classes;
{返回字符在串中的位置}
function InStr(SourceStr:PChar;Ch:Char):Integer;export;stdcall;//动态链接库函数
var
Len,i:integer;
begin
Len := strLen(SourceStr);
for i := 0 to Len-1 do
if SourceStr[i]=Ch then
begin
Result := i;
Exit;
end;
Result := -1;
end;
exports
InStr;
begin
end.
.........................................................程序执行单元
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TInStr = function(Source: PChar;Check: Char): Integer;//定义一函数类型
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
var
order: Integer;
txt: PChar;
PFunc: TFarProc;
Moudle: THandle;
begin
Moudle := Loadlibrary('C:\Documents and Settings\Administrator\桌面\dynamic\Project1.dll');//
if Moudle > 32 then
begin
Edit2.text := '';
Pfunc := GetProcAddress(Moudle,'InStr');//
txt := StrAlloc(80);
txt := StrPCopy(txt,Edit1.text);
Order := TInStr(PFunc)(txt,Key);//
if Order = -1 then
Label1.Caption := '不包含这个字符 '
else
Label1.Caption := '位于第'+IntToStr(Order+1)+'位';
end;
Freelibrary(Moudle);
end;
end.
..................................................主工程单元如下
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
对于动态调用链接库,上面是一个简单例子。系统一共包含两个编辑框。在第一个编辑框中输入一个字符串,而后在第二个编辑框中输入字符。如果该字符包含在第一个编辑框的字符串中,则标签框显示信息:“位于第n位。”,否则显示信息:“不包含这个字符。”。
问题是每次都报“不包含这个字符”且在关闭后还弹出“Exception EAccessViolation in module Project1.exe at 0001913A Access violation at address 041913A in module 'project1.exe'.”
望各位老师指点迷津,谢谢!
library Example;
uses
SysUtils,
Classes;
{返回字符在串中的位置}
function InStr(SourceStr:PChar;Ch:Char):Integer;export;stdcall;//动态链接库函数
var
Len,i:integer;
begin
Len := strLen(SourceStr);
for i := 0 to Len-1 do
if SourceStr[i]=Ch then
begin
Result := i;
Exit;
end;
Result := -1;
end;
exports
InStr;
begin
end.
.........................................................程序执行单元
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TInStr = function(Source: PChar;Check: Char): Integer;//定义一函数类型
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
var
order: Integer;
txt: PChar;
PFunc: TFarProc;
Moudle: THandle;
begin
Moudle := Loadlibrary('C:\Documents and Settings\Administrator\桌面\dynamic\Project1.dll');//
if Moudle > 32 then
begin
Edit2.text := '';
Pfunc := GetProcAddress(Moudle,'InStr');//
txt := StrAlloc(80);
txt := StrPCopy(txt,Edit1.text);
Order := TInStr(PFunc)(txt,Key);//
if Order = -1 then
Label1.Caption := '不包含这个字符 '
else
Label1.Caption := '位于第'+IntToStr(Order+1)+'位';
end;
Freelibrary(Moudle);
end;
end.
..................................................主工程单元如下
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
对于动态调用链接库,上面是一个简单例子。系统一共包含两个编辑框。在第一个编辑框中输入一个字符串,而后在第二个编辑框中输入字符。如果该字符包含在第一个编辑框的字符串中,则标签框显示信息:“位于第n位。”,否则显示信息:“不包含这个字符。”。
问题是每次都报“不包含这个字符”且在关闭后还弹出“Exception EAccessViolation in module Project1.exe at 0001913A Access violation at address 041913A in module 'project1.exe'.”
望各位老师指点迷津,谢谢!
...全文
相关推荐
java调用c++动态链接库输出
性能与灵活性: JNI提供了更底层的访问,因此在性能上通常优于JNA,但其代码更复杂,更容易出错。JNA则提供了一种相对简单且灵活的接口,但可能在处理大量或复杂的C++库时性能下降。6.
user32dll出错解决方法[代码]
用户在遇到user32.dll出错时,不应过于恐慌,很多时候这是一个简单的错误,通过仔细检查和采取正确的修复措施,就能解决。
VS2019开发简单的C/C++动态链接库并进行调用的实现
"VS2019开发C/C++动态链接库及调用教程"本文主要探讨如何在Visual Studio 2019 (VS2019) 中创建和使用C/C++动态链接库(DLL)。动态链接库是一种可被多个程
C#中如何调用动态链接库DLL
### C#中调用动态链接库DLL的知识点详解#### 一、动态链接库(DLL)简介**动态链接库**(Dynamic Link Library,简称DLL)是Microsoft Windows系统中的一个重要组成部分
Java调用动态链接库(Java 调用 DLL)
Java调用动态链接库(DLL)是Java编程中一个比较特殊的技术,主要涉及到Java与本地代码的交互。


语言基础/算法/系统设计

