用C语言编写的API DLL接口文件
这是头文件,在Delphi中如何改写和调用了这几个接口函数了?急求大牛帮助?#ifndef _OPENAPI_H_
#define _OPENAPI_H_
#include <iostream>typedef struct t8583
{
char m_acTermCode[16]; //终端号
char m_acTraceSerial[7]; //终端流水号,定长6位,不足左补0且在同一天内不允许重复
char m_acAmount[13]; //金额,单位分,定长12位,不足左补0
char m_acRespCode[4]; //响应码
char m_acNonceStr[20]; //检索参考号
char m_acPrivate[1000]; //报文私有数据域
char m_acAddition[1000]; //报文附加数据域
char m_acDetail[1000]; //报文数据明细域
t8583()
{
memset(m_acTermCode, 0, sizeof(m_acTermCode));
memset(m_acTraceSerial, 0, sizeof(m_acTraceSerial));
memset(m_acAmount, 0, sizeof(m_acAmount));
memset(m_acRespCode, 0, sizeof(m_acRespCode));
memset(m_acNonceStr, 0, sizeof(m_acNonceStr));
memset(m_acPrivate, 0, sizeof(m_acPrivate));
memset(m_acAddition, 0, sizeof(m_acAddition));
memset(m_acDetail, 0, sizeof(m_acDetail));
}
}t8583;//#define GRGOPENAPI
#define GRGOPENAPI _declspec (dllexport)/*! \brief 这是签到调用的打解包接口函数
\param data 入参 存放结构体数据
\param msg 出参 存放转换后的8583报文
\param msgLen 出参 存放转换后8583报文的长度
\return 布尔值
- true 成功
- false 失败,参数不正确或者数据有误
\note data传入格式查看范例
*/
GRGOPENAPI bool bPackSignin8583(const t8583& data, unsigned char* msg, int& msgLen);
/*! \brief 这是签到调用的打解包接口函数
\param data 出参 存放结构体数据
\param msg 入参 存放网络接收的8583报文
\param msgLen 入参 存放网络接收的8583报文长度
\return 布尔值
- true 成功
- false 失败,参数不正确或者数据有误
\note data传入格式查看范例
*/
GRGOPENAPI bool bUnpackSignin8583(t8583& data, const unsigned char* msg, int& msgLen);
/*! \brief 这是签退调用的打包接口函数
\param data 入参 存放结构体数据
\param msg 出参 存放转换后的8583报文
\param msgLen 出参 存放转换后8583报文的长度
\return 布尔值
- true 成功
- false 失败,参数不正确或者数据有误
\note data传入格式查看范例
*/
GRGOPENAPI bool bPackSignout8583(const t8583& data, unsigned char* msg, int& msgLen);
/*! \brief 这是签退调用的解包接口函数
\param data 出参 存放结构体数据
\param msg 入参 存放网络接收的8583报文
\param msgLen 入参 存放网络接收的8583报文长度
\return 布尔值
- true 成功
- false 失败,参数不正确或者数据有误
\note data传入格式查看范例
这是头文件,在Delphi中如何改写和调用了这几个接口函数了?急求大牛帮助?#ifndef _OPENAPI_H_
#define _OPENAPI_H_
#include <iostream>typedef struct t8583
{
char m_acTermCode[16]; //终端号
char m_acTraceSerial[7]; //终端流水号,定长6位,不足左补0且在同一天内不允许重复
char m_acAmount[13]; //金额,单位分,定长12位,不足左补0
char m_acRespCode[4]; //响应码
char m_acNonceStr[20]; //检索参考号
char m_acPrivate[1000]; //报文私有数据域
char m_acAddition[1000]; //报文附加数据域
char m_acDetail[1000]; //报文数据明细域
t8583()
{
memset(m_acTermCode, 0, sizeof(m_acTermCode));
memset(m_acTraceSerial, 0, sizeof(m_acTraceSerial));
memset(m_acAmount, 0, sizeof(m_acAmount));
memset(m_acRespCode, 0, sizeof(m_acRespCode));
memset(m_acNonceStr, 0, sizeof(m_acNonceStr));
memset(m_acPrivate, 0, sizeof(m_acPrivate));
memset(m_acAddition, 0, sizeof(m_acAddition));
memset(m_acDetail, 0, sizeof(m_acDetail));
}
}t8583;//#define GRGOPENAPI
#define GRGOPENAPI _declspec (dllexport)/*! \brief 这是签到调用的打解包接口函数
\param data 入参 存放结构体数据
\param msg 出参 存放转换后的8583报文
\param msgLen 出参 存放转换后8583报文的长度
\return 布尔值
- true 成功
- false 失败,参数不正确或者数据有误
\note data传入格式查看范例
*/
GRGOPENAPI bool bPackSignin8583(const t8583& data, unsigned char* msg, int& msgLen);
/*! \brief 这是签到调用的打解包接口函数
\param data 出参 存放结构体数据
\param msg 入参 存放网络接收的8583报文
\param msgLen 入参 存放网络接收的8583报文长度
\return 布尔值
- true 成功
- false 失败,参数不正确或者数据有误
\note data传入格式查看范例
*/
GRGOPENAPI bool bUnpackSignin8583(t8583& data, const unsigned char* msg, int& msgLen);
/*! \brief 这是签退调用的打包接口函数
\param data 入参 存放结构体数据
\param msg 出参 存放转换后的8583报文
\param msgLen 出参 存放转换后8583报文的长度
\return 布尔值
- true 成功
- false 失败,参数不正确或者数据有误
\note data传入格式查看范例
*/
GRGOPENAPI bool bPackSignout8583(const t8583& data, unsigned char* msg, int& msgLen);
/*! \brief 这是签退调用的解包接口函数
\param data 出参 存放结构体数据
\param msg 入参 存放网络接收的8583报文
\param msgLen 入参 存放网络接收的8583报文长度
\return 布尔值
- true 成功
- false 失败,参数不正确或者数据有误
\note data传入格式查看范例
解决方案 »
- 请教TCHART如何得到曲线X坐标的值(非鼠标的值,是曲线的值)
- 关于一个时间日期sql查询的问题
- 怎么样动态创建窗体
- 我在WIN95上装了MDAC,但装完了结果原来用BDE连接的程序连不上数据库了,是怎么回事?
- 连老师也解决不了的数据库问题!大家切磋一下吧
- q1.sql.text:='select aaa ...... from where code=:code and nas:=nas';太长如何分开
- 说白了就是一个字符串的问题!请大家给出解决的方法!多谢了!
- 求助!
- 怎样把widestring类型的变量值赋给Tstrings类型的变量?
- 在线等待:如何得到Memo或RichEdit控件中光标位置??
- @所有人 求教大神,有没有用DELPHI写的人力资源调配系统
- 初学者,谢谢
unit _8583interfaceconst DLLNAME = '你的dll名称'
type
t8583 = record
m_acTermCode = array[0..15] of char;
m_acTraceSerial = array[0..6] of char;
m_acAmount = array[0..12] of char;
m_acRespCode = array[0..3] of char;
m_acNonceStr = array[0..19] of char;
m_acPrivate = array[0..999] of char;
m_acAddition = array[0..999] of char;
m_acDetail = array[0..999] of char;
end;
implementation
function bPackSignin8583(const data: Pointer; msg:PAnsiChar; msgLen: PInteger):Boolean; cdecl; external DLLNAME name='bPackSignin8583';
function bUnpackSignin8583(data: Pointer; const msg:PAnsiChar; msgLen: PInteger):Boolean;cdecl; external DLLNAME name='bUnpackSignin8583';
function bPackSignout8583(const data: Pointer; msg:PAnsiChar; msgLen: PInteger):Boolean;cdecl; external DLLNAME name='bPackSignout8583';
end.
unit U8583;interface
const
DLLNAME = '你的dll名称' ;
type
t8583 = record
m_acTermCode :array[0..15] of char;
m_acTraceSerial : array[0..6] of char;
m_acAmount : array[0..12] of char;
m_acRespCode : array[0..3] of char;
m_acNonceStr : array[0..19] of char;
m_acPrivate : array[0..999] of char;
m_acAddition : array[0..999] of char;
m_acDetail : array[0..999] of char;
end;implementation
function bPackSignin8583(const data: Pointer; msg:PAnsiChar; msgLen: PInteger):Boolean; cdecl; external DLLNAME ;
function bUnpackSignin8583(data: Pointer; const msg:PAnsiChar; msgLen: PInteger):Boolean;cdecl; external DLLNAME ;
function bPackSignout8583(const data: Pointer; msg:PAnsiChar; msgLen: PInteger):Boolean;cdecl; external DLLNAME ;
end.
function bUnpackSignin8583(var data: t8583; const msg: PAnsiChar; var msgLen: Integer): Boolean; cdecl; external DLLNAME ;
function bPackSignout8583(const data: t8583; msg: PAnsiChar; var msgLen: Integer): Boolean; cdecl; external DLLNAME ;
//没有实际运行测试过,你自己看看行不行。
//如果你的char是双字节的话,把AnsiChar改为Char, 把PAnsiChar改为PChar
unit u8583;interfaceconst
DLLNAME = '你的dll名称';type
t8583 = packed record
m_acTermCode : array[0..15 ] of AnsiChar;
m_acTraceSerial: array[0..6 ] of AnsiChar;
m_acAmount : array[0..12 ] of AnsiChar;
m_acRespCode : array[0..3 ] of AnsiChar;
m_acNonceStr : array[0..19 ] of AnsiChar;
m_acPrivate : array[0..999] of AnsiChar;
m_acAddition : array[0..999] of AnsiChar;
m_acDetail : array[0..999] of AnsiChar;
procedure t8583;
end; function bPackSignin8583 (const data: t8583; msg: PAnsiChar; var msgLen: Integer): Boolean; cdecl; external DLLNAME;
function bUnpackSignin8583(const data: t8583; msg: PAnsiChar; var msgLen: Integer): Boolean; cdecl; external DLLNAME;
function bPackSignout8583 (const data: t8583; msg: PAnsiChar; var msgLen: Integer): Boolean; cdecl; external DLLNAME;implementationprocedure t8583.t8583;
begin
FillChar(m_acTermCode , SizeOf(m_acTermCode ), 0);
FillChar(m_acTraceSerial, SizeOf(m_acTraceSerial), 0);
FillChar(m_acAmount , SizeOf(m_acAmount ), 0);
FillChar(m_acRespCode , SizeOf(m_acRespCode ), 0);
FillChar(m_acNonceStr , SizeOf(m_acNonceStr ), 0);
FillChar(m_acPrivate , SizeOf(m_acPrivate ), 0);
FillChar(m_acAddition , SizeOf(m_acAddition ), 0);
FillChar(m_acDetail , SizeOf(m_acDetail ), 0);
end;end.
写了一个调用接口函数的代码,报错procedure TForm1.Button1Click(Sender: TObject);
var
Sdata:t8583 ;
Smsg:PAnsiChar ;
ImsgLen:Integer ;
begin
Sdata.m_acTermCode :='GA000001';
Sdata.m_acTraceSerial :='000001';
bPackSignin8583(Sdata,Smsg,ImsgLen);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Sdata:t8583 ;
Smsg:PAnsiChar ;
ImsgLen:Integer ;
begin
Sdata.m_acTermCode :='GA000001';
Sdata.m_acTraceSerial :='000001';
bPackSignin8583(Sdata,Smsg,ImsgLen);
end;
//这个试试看吧
unit Unit2;interfaceconst
DLLNAME = 'GRGOPENAPI.DLL';type
TInitProc = procedure(); cdecl;
t8583 = record
m_acTermCode : array[0..15 ] of AnsiChar;
m_acTraceSerial: array[0..6 ] of AnsiChar;
m_acAmount : array[0..12 ] of AnsiChar;
m_acRespCode : array[0..3 ] of AnsiChar;
m_acNonceStr : array[0..19 ] of AnsiChar;
m_acPrivate : array[0..999] of AnsiChar;
m_acAddition : array[0..999] of AnsiChar;
m_acDetail : array[0..999] of AnsiChar;
t8583: TInitProc;
end; TbPackSignin8583 = function(const data: t8583; msg: PAnsiChar; var msgLen: Integer): Boolean; cdecl;
TbUnpackSignin8583 = function(const data: t8583; msg: PAnsiChar; var msgLen: Integer): Boolean; cdecl;
TbPackSignout8583 = function(const data: t8583; msg: PAnsiChar; var msgLen: Integer): Boolean; cdecl;var
Data: t8583;
DllHandle: THandle;
bPackSignin8583 : TbPackSignin8583 ;
bUnpackSignin8583: TbUnpackSignin8583;
bPackSignout8583 : TbPackSignout8583 ;procedure InitProc(); cdecl;implementationuses Windows;procedure InitProc(); cdecl;
begin
with Data do
begin
FillChar(m_acTermCode , SizeOf(m_acTermCode ), 0);
FillChar(m_acTraceSerial, SizeOf(m_acTraceSerial), 0);
FillChar(m_acAmount , SizeOf(m_acAmount ), 0);
FillChar(m_acRespCode , SizeOf(m_acRespCode ), 0);
FillChar(m_acNonceStr , SizeOf(m_acNonceStr ), 0);
FillChar(m_acPrivate , SizeOf(m_acPrivate ), 0);
FillChar(m_acAddition , SizeOf(m_acAddition ), 0);
FillChar(m_acDetail , SizeOf(m_acDetail ), 0);
end;
end;initialization
Data.t8583 := InitProc;
DllHandle := LoadLibrary(PChar('ODBC32.DLL'));
@bPackSignin8583 := GetProcAddress(DllHandle, 'bPackSignin8583' );
@bUnpackSignin8583 := GetProcAddress(DllHandle, 'bUnpackSignin8583');
@bPackSignout8583 := GetProcAddress(DllHandle, 'bPackSignout8583' );end.
//更正: 把下面的语句
DllHandle := LoadLibrary(PChar('ODBC32.DLL'));
//改为
DllHandle := LoadLibrary(PChar('GRGOPENAPI.DLL'));