有一个JJ.dll是用vc++写的其   .h 文件如下:
#ifndef _SE_TARIFF_H_
#define _SE_TARIFF_H_#ifdef __cplusplus
extern "C" {            /* Assume C declarations for C++ */
#endif /* __cplusplus *//////////////////////////////////////////////////////////////////////////////
struct UVeData {
TCHAR jdcbh[13];
TCHAR djzsh[16];
TCHAR hphm[16];
TCHAR hpzl[3];
TCHAR zzg[4];
TCHAR zzcmc[41];
TCHAR gcjk[2];
TCHAR ppzwm[33];
TCHAR xh[33];
TCHAR ppywm[33];
TCHAR error[1024];
};/////////////////////////////////////////////////////////////////////////////
struct UDrData {
TCHAR dabh[11];
TCHAR xm[21];
TCHAR xb[3];
TCHAR csrq[11];
TCHAR sfzjlx[15];
TCHAR sfzhm[19];
TCHAR qtzjhm[41];
TCHAR gj[21];
TCHAR error[1024];
};/////////////////////////////////////////////////////////////////////////////
#define _SJDM_XCDJ_ 1
#define _SJDM_NJDJ_ 2
#define _SJDM_HPDJ_ 3
#define _SJDM_BGDJ_ 4
#define _SJDM_GHDJ_ 5
#define _SJDM_NSDJ_ 50
struct UEventData {
BYTE sjdm;
TCHAR sjrq[11];
TCHAR sjms[1024];
TCHAR error[1024];
};/////////////////////////////////////////////////////////////////////////////
//extern int FAR PASCAL WEP(int nParam);extern BOOL APIENTRY VeData(HWND hWnd, LPCTSTR hpzl, LPCTSTR hphm, UVeData *pdata);
extern BOOL APIENTRY DrData(HWND hWnd, LPCTSTR dabh, LPCTSTR sfzh, UDrData *pdata);
extern int APIENTRY EventData(HWND hWnd, LPCTSTR xh, BYTE sjdm, UEventData *pdata);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#ifdef __cplusplus
}                       /* End of extern "C" { */
#endif /* __cplusplus */#endif // _SE_TARIFF_H_
在delphi中如何动态和静态的调用这三个函数,请各位大侠指教!!!!!!!!

解决方案 »

  1.   

    和普通的调用没有什么区别吧,关键的问题是那几个结构体,你可能需要在delphi中重新定义,然后传递地址。不过我觉得有些问题还是要看那3个函数的具体实现,也许你只用传一个无类型指针进去就可以了,等会再来看看...
      

  2.   

    没有用到c++特性,可以直接link jj.obj 文件,
    把.h文件翻译成.pas用
      

  3.   

    这个是用C的方式来调用的,一般STDCALL就可以调用了,方法还是一样的
    LoadLibrar取得句柄,判断取得是否为空,然后GetProcAddress取得你要调用的函数地址,使用结束后在FreeLibrary,具体的看API帮助,思路都是这样的,书店里的书都有介绍怎么用的
      

  4.   

    type
      PUVeData = ^UVeData;
      UVeData = packed record
    jdcbh:       string[13];
    djzsh:       string[16];
    hphm:        string[16];
    hpzl:        string[3];
    zzg:         string[4];
    zzcmc:       string[41];
    gcjk:        string[2];
    ppzwm:       string[33];
    xh:          string[33];
    ppywm:       string[33];
    error:       string[1024];  //?????
      end;error的数组定义超过了255,这已经超过了ShortString的范围了,如果能把TChar 改为
    Char *指针就好办多了。