在dll里面是这样的:function ABCC(aaa:string):string;
begin
// application.Initialize;
result:=aaa+'***';
end;exports
ABCC;
begin
在主窗口是这样写的:
function ABCC(aaa:string):string;stdcall external 'c:\dllpro.dll';
procedure TForm1.Button1Click(Sender: TObject);
type
TABCC=function(aaa:string):string;stdcall;
var
mw:HWND;
mt:TABCC;
str:string;
begin
mw:=loadlibrary('c:\dllpro.dll');
if mw<>0 then
try
mt:=Getprocaddress(mw,'ABCC');
if assigned(mt) then
str:=mt('haha');
// edit1.Text:=str;
finally
FreeLibrary(mw);
end;
end;
但是我在跟踪到运行到:FreeLibrary(mw);这里的时候就出错了.
到底什么问呢。请帮帮菜鸟
begin
// application.Initialize;
result:=aaa+'***';
end;exports
ABCC;
begin
在主窗口是这样写的:
function ABCC(aaa:string):string;stdcall external 'c:\dllpro.dll';
procedure TForm1.Button1Click(Sender: TObject);
type
TABCC=function(aaa:string):string;stdcall;
var
mw:HWND;
mt:TABCC;
str:string;
begin
mw:=loadlibrary('c:\dllpro.dll');
if mw<>0 then
try
mt:=Getprocaddress(mw,'ABCC');
if assigned(mt) then
str:=mt('haha');
// edit1.Text:=str;
finally
FreeLibrary(mw);
end;
end;
但是我在跟踪到运行到:FreeLibrary(mw);这里的时候就出错了.
到底什么问呢。请帮帮菜鸟
解决方案 »
- delphi 2007 中三层开发都用些什么控件啊?
- 高分求 《delphi的面向对象编程思想》刘艺 编写的电子版本的图书下载。
- 高报酬求高手解BPL中某一窗口内一控件的某一事件
- 关于.txt文件导入sql数据库的问题
- delphi有和 QQ中上下移动的控件吗?
- 关于 "接口"
- 请问那位知道对Serv-U编程的接口函数,我想用自己的程序添加一个用户并指定该用户的目录。能完成添加用户,用Windows自带的FTP也行。
- rave数据字段动态调整问题请教
- 简单问题,怎么传递若干个字符串数组给VC呢?
- 有关decision cube之二
- IntraWeb中怎样关闭IE浏览器?
- 用IntraWeb组件作网页开发时,想把TIWRectangle组件居中显示,应该怎样设置
1 但是如果是procedure过程.去掉sharemem就可以运行.如果增加也可以运行但是退出的时候就会提示出错.2 如果是function的话。必须要sharemen,运行可以.但是退出就是出错.不知道为什么.
我测试结果.DELPH6下
我再试试pchar.看看。
FreeLibrary(mw);去掉这个.再去掉sharemem就可以了。但是为什么呢.
很是奇怪.如果是过程procedure 怎么测试跟我前面的反过来了呢
0.function ABCC(aaa:string):pchar; //最好用PCHAR1.function ABCC(aaa:string):string; Stdcall; //调用方式,要么都加,要么都不加 2.function ABCC(aaa:string):string;stdcall external 'c:\dllpro.dll'; //静态调用 -------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
type
TABCC=function(aaa:string):string;stdcall; //动态调用 3procedure TForm1.Button1Click(Sender: TObject);
type
TABCC=function(aaa:string):string;stdcall;
var
mw:HWND;
mt:TABCC;
str:string;
begin
//查找DLL
mw:=loadlibrary('c:\dllpro.dll');
//如果存在
if mw<>0 then
try
//查找函数
@mt:=Getprocaddress(mw,'ABCC'); //最好加上@
//如果函数存在
if assigned(@mt) then
str:=mt('haha'); //调用函数
// edit1.Text:=str;
finally
FreeLibrary(mw);
end;
end;
var
hRedMoon: THandle;
MyRedMoon: TRedMoon;
begin
hRedMoon := LoadLibrary('RsDanyueer.dll');
try
if hRedMoon = 0 then
Result := -1
else
begin
@MyRedMoon := GetProcAddress(hRedMoon, 'RedMoon');
if not (@MyRedMoon = nil) then
begin
Result := MyRedMoon;
end
else
RaiseLastWin32Error;
end;
finally
FreeLibrary(hRedMoon);
end;
end;