我现在做了一个C++的DLL库,其中头文件如下:
#ifndef __NC_SELFPROTOCOL_H__
#define __NC_SELFPROTOCOL_H__#include <malloc.h>#ifdef WIN32
#define INFOSEC_NSC_DLL_EXPORT    __declspec(dllexport)
#else
#define INFOSEC_NSC_DLL_EXPORT
#endif#define INFOSEC_NSC_SELF_PROTOCOL_PARSE_SUCC 0
#define INFOSEC_NSC_SELF_PROTOCOL_MEMORY_OUT 1
#define INFOSEC_NSC_SELF_PROTOCOL_PARSE_NOT_MODIFY 2
#define INFOSEC_NSC_SELF_PROTOCOL_PARSE_FLAG_ERROR 3int INFOSEC_NSC_DLL_EXPORT print_error(char    *psErr);class INFOSEC_NSC_DLL_EXPORT CNSC_SelfProtocol
{
public:
CNSC_SelfProtocol();
~CNSC_SelfProtocol();public :
int print_error(char    *psErr);
int ParseRequest(
char *psReqIN,
int iReqLenIN
);
int ParseResponse(
char *psRespIN,
int iRespLenIN
);
private:
char *m_psReqOUT;
char *m_psRespOUT;
};#endif现在我想在delphi中调用这个动态库,并实例化该类得到一个类实例,然后利用该类实例来调用DLL库中该类的public成员函数。我查了一些资料,但是是关于delphi中调用的DLL中C 接口,类似上边所说的,动态库里封装了一个类的这种,我不晓得在delphi中应该如何来生成类实例啦。恳请各位高手指教,多谢。

解决方案 »

  1.   

    在你的动态连接库中在增加一个输出函数,通过该输出函数创建类的实例;在类中增加一个Free()方法,负责析构实例。》》》》》
    现在我想在delphi中调用这个动态库,并实例化该类得到一个类实例,然后利用该类实例来调用DLL库中该类的public成员函数。
    》》》》》
    这个比较有难度,因为c++的类实例的内存布局和delphi的不一定相同,所以你只能通过抽象类来进行通信,不是几句话能够说清楚的。其实com技术就是解决你这样的问题的,你可以用C++写成com对象,然后delphi调用。
    你看看这方面的书,明白了com的原理后,解决你的问题很容易。
      

  2.   

    如果不采用COM接口,你只能写普通的DLL函数,然后利用那些函数去控制类。比如XOPEN函数去创建类的实体,并返回句柄。
    传递句柄给XEXEC函数,进行控制。
    传递句柄给XCLOSE函数,进行销毁。