调用dll问题,急!!!(在线等) ( 积分: 100 )

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

jenenens

Unregistered / Unconfirmed
GUEST, unregistred user!
我自己写了一个调用动态链接库wfwsClient.dll的测试程序。(wfwsClient.dll是用VB写的一个使用Soap消息调用Web Services的接口)可是老是提示:“无法定位输入点query于动态链接库wfwsClient.dll中”
附上:
VB接口API
BusinessDataOperateProxy类
[类名] BusinessDataOperateProxy
[类作用描述] 数据交换客户端VB外部接口类
[类方法]
Public Function query(ByVal sessionid As String, ByVal s_sql As String) As XMLResult
//用于查询
-参数:sessionid:工作流id号
s_sql:SQL语句
-返回结果:XMLResult对象

Public Function execute(ByVal sessionid As String, ByVal s_sql As String)
//用于执行SQL语句
-参数:sessionid:工作流id号
s_sql:SQL语句

 WorkFlowProxy 类
[类名] WorkFlowProxy
[类作用描述] 工作流应用客户端VB外部接口类
[类方法]
Public Function newAndEndAccept(ByVal sessionid As String, ByRef AcceptInfoArray() As VO_AcceptInfo) As Boolean
//接受新的业务受理(可以是一批),并且结束业务受理、进入下一个工作流节点
-参数:sessionid:会话ID
acceptinfoArray: 受理信息对象数组
-返回结果:true-成功
false-失败

. Public Function newAccept(ByVal sessionid As String, ByRef AcceptPropertyArray() As VO_AcceptProperty) As VO_AcceptResult()
//接受新的业务受理(可以是一批),并且结束业务受理、进入下一个工作流节点
-参数:sessionid:会话ID
acceptinfoArray: 受理信息对象数组
-返回结果:VO_AcceptResult对象数组

[类方法]
Public Function getUserTaskInfo(ByVal sessionid As String) As VO_TaskInfo()
//获取指定用户的任务信息
-参数:sessionid:会话ID
-返回结果:VO_TaskInfo 对象数组

[类方法]
Public Function getUserTask(ByVal sessionid As String) As VO_TaskProperty()
//获取指定用户的任务项(不带共享数据项)
-参数:sessionid:会话ID
-返回结果:VO_TaskProperty [] 任务信息对象数组

[类方法]
Public Function getShareDataItem(ByVal sessionid As String, ByVal TaskId As String) As VO_ShareDataItem()
//获取指定共享数据项
-参数: sessionid:会话ID
-返回结果:VO_ShareDataItem 对象数组


XMLResult类
[类名] XMLResult
[类作用描述] 操作query方法返回的XML串
[类方法]
Public Function Get_ColoumnCount() As Integer
//获取ColoumnCount项的值
-返回结果:字段个数

Public Function Get_BeginIndex() As Integer
//获取BeginIndex项的值
-返回结果:开始元素的位置

Public Function Get_RowCount() As Integer
//获取RowCount项的值
-返回结果:记录数
Public Function Get_ColoumnsValue(Index As Integer) As String
//获取指定字段名称
-参数: Index:元素的位置
-返回结果:字段名称

Public Function Get_RowValue(IndexI, IndexJ As Integer) As String
//获取指定位置的数据
-参数: IndexI:元素的位置行
IndexJ:元素的位置列
-返回结果:指定数据的值
 
我自己写了一个调用动态链接库wfwsClient.dll的测试程序。(wfwsClient.dll是用VB写的一个使用Soap消息调用Web Services的接口)可是老是提示:“无法定位输入点query于动态链接库wfwsClient.dll中”
附上:
VB接口API
BusinessDataOperateProxy类
[类名] BusinessDataOperateProxy
[类作用描述] 数据交换客户端VB外部接口类
[类方法]
Public Function query(ByVal sessionid As String, ByVal s_sql As String) As XMLResult
//用于查询
-参数:sessionid:工作流id号
s_sql:SQL语句
-返回结果:XMLResult对象

Public Function execute(ByVal sessionid As String, ByVal s_sql As String)
//用于执行SQL语句
-参数:sessionid:工作流id号
s_sql:SQL语句

 WorkFlowProxy 类
[类名] WorkFlowProxy
[类作用描述] 工作流应用客户端VB外部接口类
[类方法]
Public Function newAndEndAccept(ByVal sessionid As String, ByRef AcceptInfoArray() As VO_AcceptInfo) As Boolean
//接受新的业务受理(可以是一批),并且结束业务受理、进入下一个工作流节点
-参数:sessionid:会话ID
acceptinfoArray: 受理信息对象数组
-返回结果:true-成功
false-失败

. Public Function newAccept(ByVal sessionid As String, ByRef AcceptPropertyArray() As VO_AcceptProperty) As VO_AcceptResult()
//接受新的业务受理(可以是一批),并且结束业务受理、进入下一个工作流节点
-参数:sessionid:会话ID
acceptinfoArray: 受理信息对象数组
-返回结果:VO_AcceptResult对象数组

[类方法]
Public Function getUserTaskInfo(ByVal sessionid As String) As VO_TaskInfo()
//获取指定用户的任务信息
-参数:sessionid:会话ID
-返回结果:VO_TaskInfo 对象数组

[类方法]
Public Function getUserTask(ByVal sessionid As String) As VO_TaskProperty()
//获取指定用户的任务项(不带共享数据项)
-参数:sessionid:会话ID
-返回结果:VO_TaskProperty [] 任务信息对象数组

[类方法]
Public Function getShareDataItem(ByVal sessionid As String, ByVal TaskId As String) As VO_ShareDataItem()
//获取指定共享数据项
-参数: sessionid:会话ID
-返回结果:VO_ShareDataItem 对象数组


XMLResult类
[类名] XMLResult
[类作用描述] 操作query方法返回的XML串
[类方法]
Public Function Get_ColoumnCount() As Integer
//获取ColoumnCount项的值
-返回结果:字段个数

Public Function Get_BeginIndex() As Integer
//获取BeginIndex项的值
-返回结果:开始元素的位置

Public Function Get_RowCount() As Integer
//获取RowCount项的值
-返回结果:记录数
Public Function Get_ColoumnsValue(Index As Integer) As String
//获取指定字段名称
-参数: Index:元素的位置
-返回结果:字段名称

Public Function Get_RowValue(IndexI, IndexJ As Integer) As String
//获取指定位置的数据
-参数: IndexI:元素的位置行
IndexJ:元素的位置列
-返回结果:指定数据的值
 
这是我的代码:
调用部分:
unit UnitAPI;

interface

uses XMLResult;
function query(sessionid:String;s_sql:String):TXMLResult; stdcall; external 'wfwsClient.dll';
function Get_ColoumnCount(): Integer; stdcall; external 'wfwsClient.dll';
function Get_BeginIndex(): Integer; stdcall; external 'wfwsClient.dll';
function Get_RowCount(): Integer; stdcall; external 'wfwsClient.dll';
function Get_ColoumnsValue(Index: Integer): string; stdcall; external 'wfwsClient.dll';
function Get_RowValue(IndexI: Integer; IndexJ: Integer): string; stdcall; external 'wfwsClient.dll';
implementation
end.


定义TXMLResult类部分:
unit XMLResult;

interface

uses
Classes, SysUtils;

type
TXMLResult = class(TObject)

private

{ Public declarations }
public
// constructor Create(AOwner: TComponent); override;
// destructor Destroy; override;

function GetColoumnCount(): Integer;
function GetBeginIndex(): Integer;
function GetRowCount(): Integer;
function GetColoumnsValue(Index: Integer): string;
function GetRowValue(IndexI, IndexJ: Integer): string;
end;

implementation

uses UnitAPI;

function TXMLResult.GetColoumnCount(): Integer;
begin
Result := UnitAPI.Get_ColoumnCount();
end;

function TXMLResult.GetBeginIndex(): Integer;
begin
Result := UnitAPI.Get_BeginIndex();
end;

function TXMLResult.GetRowCount(): Integer;
begin
Result := UnitAPI.Get_RowCount();
end;

function TXMLResult.GetColoumnsValue(Index: Integer): string;
begin
Result := UnitAPI.Get_ColoumnsValue(Index);
end;

function TXMLResult.GetRowValue(IndexI: Integer; IndexJ: Integer): string;
begin
Result := UnitAPI.Get_RowValue(IndexI, IndexJ);
end;
end.

Test部分:
unit test;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XMLResult;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit8: TEdit;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Edit9: TEdit;
Edit10: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation

uses UnitAPI;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text := IntToStr(query(trim(Edit1.Text),trim(Edit2.Text)).GetColoumnCount);
Edit4.Text := IntToStr(query(trim(Edit1.Text),trim(Edit2.Text)).GetBeginIndex);
Edit5.Text := IntToStr(query(trim(Edit1.Text),trim(Edit2.Text)).GetRowCount);
Edit6.Text := query(trim(Edit1.Text),trim(Edit2.Text)).GetColoumnsValue(StrToInt(Edit8.Text));
Edit7.Text := query(trim(Edit1.Text),trim(Edit2.Text)).GetRowValue(StrToInt(Edit9.Text),StrToInt(Edit10.Text));
end;

end.
 
VB生成的带CLASS的DLL 不能这么调用的
你最好把它变成COM
 
这几天我用c++写了个dll,一开始也遇到象你那样的问题,但是后来解决了,但是现在也还有个问题没有解决,那就是我在c++的dll中增加一管理线程的功能后,我的程序调用dll的时候窗口就不出现了,而是在“后台”运行了(任务管理器中可以看到线程)
 
调用惯例要一致。
 
怎么把它变成COM??
 
这是activex library 不能象普通dll那样调用,可以这样试试

uses comobj;
var
obj:olevariant;

obj:=createoleobject('dllfilename.classname');
obj.procedure1(...);
dll要先注册
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
759
import
I
后退
顶部