dll调用(给了VC,VB的参数类型,未给DELPHI的)(100分)

  • 主题发起人 主题发起人 zhangzzy99
  • 开始时间 开始时间
Z

zhangzzy99

Unregistered / Unconfirmed
GUEST, unregistred user!
PCL812PG板卡的DLL调用,不知DELPHI头文件如何编写,试过了好多DELPHI中的类型,还是不对
请多指教!

下面为VC的
int PASCAL W_812PG_Initial( int card_number , int base_address );
int PASCAL W_812PG_Switch_Card_No( int card_number );
int PASCAL W_812PG_DI( int port_number, unsigned char *di_data );??/
int PASCAL W_812PG_DI_Channel( int di_ch_no , unsigned int *di_data );???
int PASCAL W_812PG_DO( int port_number , unsigned char do_data );
int PASCAL W_812PG_DA( int da_ch_no, unsigned int da_data );
 
假设DLL文件名: test1.dll
function W_812PG_Initial(card_number, base_address: integer): integer; stdcall; external 'test1.dll';
其他的类似.
int --> integer
unsigned char * ---> pchar
unsigned char ---> byte
unsigned int * ---> pchar, pinteger
unsigned int ---> dword
 

再问一个问题,象下面的结构体,又是如何对应的
struct REFERENCE
{
unsigned char board_select;
unsigned char access;
};

struct dpn_interface
{
struct REFERENCE reference;
unsigned char stat_nr;
unsigned char length;
unsigned short int error_code;
unsigned char slv_state;
unsigned char sys_state;
unsigned char sys_event;
unsigned char user_data [MAX_DATA_LEN];
};
 
我有个馊主意,不过肯定能行,
你用过corba没有?
找一个c2idl和idl2pas的编译器(主要是我都没有)
c2idl可能vc里面会有,idl2pas 大富翁上好多人都有的,
大家可以帮帮忙,发给他把。
拿到这两个编译器后,你先把你不知道的c类型都定义出来,
然后c2idl,然后idl2pas,于是全都有了。
 
TREFERENCE = record
board_select: Byte;
access: Byte;
end;
Tdpn_interface = record
reference: TREFERENCE;
stat_nr: Byte;
length: Byte;
error_code: ShortInt;
slv_state: Byte;
sys_state: Byte;
sys_event: Byte;
user_data [MAX_DATA_LEN]: Byte;
end;
 
真的谢谢大家,再问一个,如下DELPHI中如何调用
extern CT W32EXPORT unsigned short int far CLV CLT dpn_init_name
(char far *, struct dpn_interface far *);
 
各位大虾帮个忙呀
 
试试这样行不行。
var
a: AnsiString;
begin
dpn_init_name(@a);
end;
 
unsigned short int dpn_init (struct dpn_interface far * ptr)

关键是结构类型,struct在delphi中可以用record表示,
但是 struct dpn_interface far * ptr 如何表示?
 
各位大虾帮个忙呀
 
haha,can u give me a help
 
can u give me a help
 
http://www.delphibbs.com/delphibbs/rules.asp
 
接受答案了.
 
我用的dll是c/C++写的,现在我要在delphi中调用它,应该怎么做阿?
我这里有.h文件 ,请问怎么把它翻译成pas文件。
下面是调用my.dll文件的.h文件。

/******************************************************************************
mydb.h
/******************************************************************************
#ifndef __InocDB_DEFINED__
#define __InocDB_DEFINED__

//#ifndef UNIX
//#include "cavo.h"
//#else
#ifdef BT_PSZ
#undef BT_PSZ
#endif
#define BT_PSZ 17
#ifdef BT_LONG
#undef BT_LONG
#endif
#define BT_LONG 1
//#endif

#include "DBFStruc.h"

///////////////////////////////////////////////////////////////////////////////
// my ERROR Codes start from ERDD_USER + 0
//
#define ERDD_USER 2000
#define INOCDB_ERR_NEED_EXCLUSIVE ERDD_USER + 1
#define INOCDB_ERR_INVALID_WORKAREA ERDD_USER + 2
#define INOCDB_ERR_INSERTREC_FAILED ERDD_USER + 3
#define INOCDB_ERR_READREC_FAILED ERDD_USER + 4
#define INOCDB_ERR_UPDATEREC_FAILED ERDD_USER + 5

#ifdef __cplusplus
extern "C" {
#endif

extern DWORD APIENTRY InocDB_DLLInit(HANDLE* phContextObj);
extern void APIENTRY InocDB_DLLDeInit(HANDLE hContextObj);

#ifdef __cplusplus
}
#endif

#endif // __InocDB_DEFINED__

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

delphi该怎么做,才能调用里面的函数??
 
后退
顶部