Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 5813|回复: 10

带form的dll或so文件编写和调用

[复制链接]

该用户从未签到

发表于 2012-2-7 01:40:01 | 显示全部楼层 |阅读模式
如题。。


library guilib001;

{$mode objfpc}{$H+}

uses
  Classes, interfaces, SysUtils,Forms, guilib001main,// in 'guilib001main.pas',
  Global001
  { you can add units after this };


function Comprueba_formulario(formulario:string):Boolean;
Var i:Integer;
begin
Result:=False;
for i := 0 to Screen.CustomFormCount-1 do
if Screen.CustomForms.Name =formulario then
begin
Result:=True;
end
end;

PROCEDURE RunFrmmain001(db: TDBConPak); export;
begin
{$IFDEF MSWINDOWS}
  Application.Initialize;
{$ENDIF}
  Global001.dbc1:=db;
  if not Comprueba_formulario('Formmain001') then
  begin
  with TFormmain001.Create(Application) do try
    ShowModal;
  finally
    free;
  end;
  end
  else
  begin
  Formmain001.Show;
  end;

end;

{$R *.res}

exports
  RunFrmmain001, GetStruct;

begin
end.
               
/////////////////////////////////////////////////////////////////////////////////////

procedure TMainForm.Button1Click(Sender: TObject);
begin
  mDBC.host:=Edit1.Text;
  mDBC.user:=Edit2.Text;
  mDBC.passwd:=Edit3.Text;
  mDBC.port:=SpinEdit1.Value;
  mDBC.Protocol:=Edit4.Text;

{$IFDEF MSWINDOWS}
  openlibHandle:=LoadLibrary(LibRuta+'guilib001.dll');
{$ELSE}
  {$IFDEF DARWIN}  //OS X
  openlibHandle:=LoadLibrary(LibRuta+'libguilib001.dylib');   // 苹果下没测试
  {$ELSE} //Linux
  openlibHandle:=LoadLibrary(LibRuta+'libguilib001.so');
  {$ENDIF}
{$ENDIF}
if openlibHandle = 0 then
   begin
   MessageDlg('不能载入动态链接库', mtError, [mbOK], 0);
   exit;
   end;
  try
    pointer(RunFrmmain001):=GetProcedureAddress(openlibHandle, 'RunFrmmain001');
    if pointer(RunFrmmain001) = nil then
      begin
      showmessage('在链接库中找不到过程方法!');
      exit;
      end;
    // pointer(RunFrmmain001):=GetProcedureAddress(openlibHandle, 'RunFrmmain001');
     pointer(GetStruct):=GetProcedureAddress(openlibHandle, 'GetStruct');
     if pointer(GetStruct) = nil then
      begin
      showmessage('在链接库中找不到程式函数!');
      exit;
      end;
     mp1:=GetStruct();
     RunFrmmain001(mDBC);
  finally
   // FreeLibrary(openlibHandle);
  end;


end;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-4-8 01:03:38 | 显示全部楼层
靠,都没人发表意见。。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-4-8 01:05:46 | 显示全部楼层
此版本 FreeLibrary(openlibHandle); 这句不可用。
修正版可以用了,
没有意见,俺就不发了。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-4-8 09:06:28 | 显示全部楼层
从浏览人数和下载人数来看,大家都是来学习的,你写得太好了。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-5-17 20:50:40 | 显示全部楼层
很不错。 学习了。正在做这些DLL的。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-7-30 11:14:51 | 显示全部楼层
正在学,谢谢分享!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-6-17 18:48:47 | 显示全部楼层
Options changed, recompiling clean with -B
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
/usr/bin/ld: cannot find -lprunform
GuitestDemo.lpr(19,1) Error: Error while linking
GuitestDemo.lpr(19,1) Fatal: There were 1 errors compiling module, stopping
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-6-17 18:49:16 | 显示全部楼层
这到底怎么回事?
Options changed, recompiling clean with -B
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
/usr/bin/ld: cannot find -lprunform
GuitestDemo.lpr(19,1) Error: Error while linking
GuitestDemo.lpr(19,1) Fatal: There were 1 errors compiling module, stopping
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-6-17 18:50:29 | 显示全部楼层
好痛苦啊,解决不了so库调用,所有的例子都是上面的错误提示
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-6-17 18:54:31 | 显示全部楼层
不过我还是通过了编译,但是为什么测试程序无法运行????????!!!!!!!!!!!!!!!!!!!1
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2026-6-28 19:10 , Processed in 0.074191 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表