delphi可以调用VB写的Dll吗? ( 积分: 0 )

  • 主题发起人 主题发起人 jenenens
  • 开始时间 开始时间
J

jenenens

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi可以调用VB写的Dll吗?
 
delphi可以调用VB写的Dll吗?
 
只要VB写的输出函数是标准的,Delphi就可以调用。
 
任何语言编写的DLL都可以被delphi调用.
需要在delphi中根据VB的函数名和参数写出头文件
 
ActiveX Dll 可以吗?
该怎么调呢
怎么老是提示:
“无法定位输入点query于动态链接库wfwsClient.dll中”
 
ACTIVEX DLL的是可以的
但前提是你必须导入这个COM
生成接口 PASCAL 文件
然后就能USE然后调用了
 
或者 你用CREATEOLEOBJECT这个东西 然后直接 调用它的方法生成你想要的数据
 
BB写的DLL只能是ActiveX.而不能写动态链接库.
不管是ActiveX还是动态链接库,Delphi都能调用.
ActiveX可以导入,也可以用CreateOleObject的方式创建.但首先你的ActiveX组件要注册才行
 
具体在Delphi中怎么操作呢?
例如:动态链接库wfwsClient.dll 有方法query
具体该怎么做呢?
 
上网找一下很多的,
有动态调用,有静态调用,呵呵,很简单的,
dll是不区分语言的.
在调用之前你必须先确保ActiveX DLL必须被注册(参考QA000654 "如何注册使用.ocx控件")。有两个办法首先调用ActiveX DLL:
1、使用CreateObject函数动态地建立对象。在Delphi的Demos/ActiveX/OleAuto/AutoCtrl目录中有这方面的例子,它是调用Word的例子。
2、使用Project|Import Type Library项,然后从目前系统中注册的所有DLL中找到你的DLL,这样Delphi就会生成一个.pas文件,你可以调用这个单元来使用ActiveX DLL中的类。
 
DELPHI中动态调用dll

--------------------------------------------------------------------------------

http://edu.tmn.cn (2005-2-27 19:42) (来自未知) 作者:未知

 
显式例子:



unit Main;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Grids, DBGrids, DB, DBTables, DBCtrls;



type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Image1: TImage;

DataSource1: TDataSource;

Table1: TTable;

Table1SpeciesNo: TFloatField;

Table1Category: TStringField;

Table1Common_Name: TStringField;

Table1SpeciesName: TStringField;

Table1Lengthcm: TFloatField;

Table1Length_In: TFloatField;

Table1Notes: TMemoField;

Table1Graphic: TGraphicField;

DBGrid1: TDBGrid;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



// function GetInteger(I:Integer): Integer;stdcall;external "DLLOne.dll";

// function GetDouble(F:Double): Double;stdcall;external "DLLOne.dll";



TGetDouble = function (F:Double): Double
stdcall;



var

Form1: TForm1;



implementation



{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);

var D: Double;

DLLHandle: THandle;

Func: TGetDouble;

begin

Image1.Picture.Assign(Table1Graphic);

Table1Graphic.Assign(Image1.Picture);

Exit;

DLLHandle := LoadLibrary("DLLOne.dll");

try

@Func := GetProcAddress(DLLHandle, "GetDouble");



//Edit1.Text := IntToStr(GetInteger(2));

//D := GetDouble(2.2);

if Assigned(@Func) then

begin

D := Func(2.2);

Edit2.Text := FloatToStr(D);

end;



finally

FreeLibrary(DLLHandle);

end;

end;



end.



隐式例子:



library DLLOne;



uses

SysUtils,

Classes;



{$R *.res}



function GetDoubleExt(F:Double): Double;stdcall;external "DLLTwo.dll";

function GetInt(I:Integer): Integer;stdcall;external "DLLTwo.dll";



function GetInteger(I:Integer): Integer;stdcall;

begin

Result := GetInt(I);

end;



function GetDouble(D:Double): Double;stdcall;

begin

Result := GetDoubleExt(D);

end;



exports

GetInteger,

GetDouble;



begin

end.















library DLLTwo;



{ Important note about DLL memory management: ShareMem must be the

first unit in your library"s USES clause AND your project"s (select

Project-View Source) USES clause if your DLL exports any procedures or

functions that pass strings as parameters or function results. This

applies to all strings passed to and from your DLL--even those that

are nested in records and classes. ShareMem is the interface unit to

the BORLNDMM.DLL shared memory manager, which must be deployed along

with your DLL. To avoid using BORLNDMM.DLL, pass string information

using PChar or ShortString parameters. }



uses

SysUtils,

Classes;



{$R *.res}

function GetDoubleExt(D:Double):Double ;stdcall;

begin

Result := D;

end;

function GetInt(I:Integer): Integer;stdcall;

begin

Result := I;

end;



exports

GetDoubleExt,

GetInt;



begin

end.
 
这个dll的内容是通SOAP调用Web Service 。
按照 zlkxzy 的做法
使用Project|Import Type Library项,然后从目前系统中注册的所有DLL中找到你的DLL,这样Delphi就会生成一个.pas文件,你可以调用这个单元来使用ActiveX DLL中的类

调用的时候总是爆出 ,参数错误
用VB去调用却总是爆出: 拒绝访问
 
后退
顶部