请VB和DELPHI都会用的高手帮忙(100分)

  • 主题发起人 主题发起人 Free
  • 开始时间 开始时间
F

Free

Unregistered / Unconfirmed
GUEST, unregistred user!
在VB中declare sub loadmcp lib"mcp.dll"()在DELPHI中应如何写?
在VB中declare sub unloadmcp lib"mcp.dll"()在DELPHI中应如何写?
我用的是DELPHI1。0 在VB中一DLL的声明如下:declate function opendrw lib"posdev.dll"() 我把它改在DELPHI下:
unit Unit1;

interface

uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
myhandle,onehandle,twohandle:thandle;
opendraw: function:integer;
x:integer;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
onehandle:=loadlibrary('mcp.dll');
twohandle:=loadlibrary('init.dll');
myhandle:=loadlibrary('posdev.dll');
IF MYHAndle<=0
then edit1.text:='false'
else edit1.text:='true';
@opendraw:=getprocaddress(myhandle,'posdev');
if not assigned(opendraw)
then edit2.text:='false'
else edit2.text:='true';
x:=opendraw();
end;

end.
但是在x:=opendraw()一句报错ERR0R85:";"EXPECTED
我应该如何调用该函数?
 
我的主页上有一篇
《Delphi中DLL的创建和使用》
去看看就行了!
http://www.nbip.net/michaeljia
在《源码分析》里!



 
'MCP.DLL' 没具体用过, 但是 D1 下引用 DLL 说明还是知道的

1. 在 Interface 段加入一行(如果说明成全局函数)
for function:
function FuncName(Paramlist): ResultType;
for procedure:
procedure ProcName(ParamList);

2. 在Implementation 段加入一行
for function:
function FuncName(ParamList): ResultType;
external DllName name 'FunctionNameInDll';
or
function FuncName(ParamList): ResultType;
external DllName index IndexNumber;
for procedure:
procedure ProcName(ParamList)
external DllName name 'ProcNameInDll';
or
procedure ProcName(ParamList)
external DllName indes IndexNumber;

注意:
1. 你必须知道 Dll 中的具体参数以及其类型, 入口/出口变量
2. 如果使用 Dll 中的 name 则名字的大小写不能忽略

可以参考: Delphi/source/rtl/win/WinProcs.pas
 
hehe... simple

x := opendraw


no ().
 
我现在做的是一套收款机上用的程序,MCP。DLL是收款机的驱动,但是我只有VB的声明,不加载MCP。DLL就不能使用POS外设,VB中的声明是:DECLARE SUB LOADMCP LIB “MCP。DLL”()然后,VB中再CALL LOADMCP即可。我在DELPHI中应该如何写?
 
DECLARE SUB LOADMCP LIB “MCP.DLL”() 的 Delphi等价语句是:
procedure LOADMCP
external 'MCP.DLL' name 'LOADMCP';

CALL LOADMCP 的Delphi等价语句是:
LOADMCP;

可以了吗?给分吧.
 
你采用的是动态DLL装入,holly的方法正确,但在你的程序中:
@opendraw:=getprocaddress(myhandle,'posdev');
似乎不对,根据你的VB声明,应为:
@opendraw:=getprocaddress(myhandle,'opendraw');
 
我目前的程序如下:
unit Unit1;

interface

uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
a,b:integer;
procedure loadmcp;
function initposdevice:integer;
function opendrw:integer;

implementation
procedure LOADMCP
external 'C:/WINDOWS/SYSTEM/mcp.DLL'
function INITPOSDEVICE:integer;external'C:/WINDOWS/SYSTEM/init.dll'
function opendrw:integer;external'C:/WINDOWS/SYSTEM/posdev';
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
loadmcp;
{b:=INITPOSDEVICE;}
a:=opendrw;
end;

end.
但是 执行到LOADMCP时,ERROR为ERROR CREATING PROCESS:FILE WAS NOT FOUND(2)
关于MCP的说明如下:
调入MCP 文件PRIME03B。DAT要在当前目录下 在程序开始运行VB声明:
DECLARE SUB LOADMCP LIB “MCP。DLL”()


DELPHI 调用带。DAT的DLL有何特殊规则,我的程序问题在那里,请各位大侠帮帮忙!
万分感谢!
 
你的
function opendrw:integer;external'C:/WINDOWS/SYSTEM/posdev';
是否漏掉了.dll,应该为
function opendrw:integer;external'C:/WINDOWS/SYSTEM/posdev.dll';

 
你把函数或过程的 name or index 漏掉了, 应该为:

procedure LOADMCP
external 'mcp' name 'loadmcp';

后面的'loadmcp'的大小写不能搞错, 如果不能确定可以用其他工具打开看一下该
dll的export部分. 在Win95下装上QickView就能看一般的dll中import和export
了那些函数

 

huizhang说的对。
初次见面,请多多关照。灌水一篇。:
 
先谢谢各位,但是问题依旧。
 
那么你肯定在C:/WINDOWS/SYSTEM/下有
mcp.DLL, init.dll, posdev.dll这三个文件了吗?
PRIME03B.DAT放在了您的EXE一起了吗?
这套驱动程序还需要其他文件吗?
你用试过用VB了吗?VB下有没有问题?

你这100分真难赚:(

 
yy老兄,我把所有的DLL和DAT都放在/WINDOWS/SYSTEM/;c:/;C:/DELPHI/;
C:/DELPHI/BIN/;C:/DELPHI/LIB/.我的。EXE在c:/delphi/下
这套驱动还有别的DLL,但是只有先加载MCP和INIT后才可以正确驱动各种外设
我在VB下没遇到问题,声明和应用都很简单
我的环境是后台SQL SERVER6。5 前台WINDOWS3。1
依目前的情况,我有点想用VB3。0 但又觉得ODBC太慢
我应该。。。。
 
直接从"程序管理器"中运行你的程序,而不要在Delphi IDE中运行如何?
 
直接运行,提示“不能找到文件(或它的组件)”
我认为还。DAT的问题
 
本论坛有个“32位DLL如何调用?”问题好象最后解决是使用了
stdcall 和 index xx,
不知对您有用吗?
 
谢谢yy老兄,我一会去看一下,不过,我是用DELPHI1。0调用16位的DLL,可能
与32位的调用有些不同。
祝YY兄节日快乐,也祝帮助过我的朋友节日快乐!
 
后退
顶部