请教:我现在要调用c写的dll,我准备建立一个公共单元文件,在该文件中动态调用dll中的东西。现在的问题是:我调用的是dll中一个类下面的函数。请问我在公共单元文件下该怎么调用。然后其它窗体的事件可以用这函数

解决方案 »

  1.   

    在C中,将dll里面类成员函数export.
      

  2.   

    c的dll文件不是我写的,不过要用到的函数已经export了。
      

  3.   

    这是那个结构
    Proaddot=^roaddot;
        roaddot=record
          longti:double;
          lati:double;
       end;
       Proadline=^roadline;
       roadline=record
         RoadID:integer;
         dx:integer;
         dy:integer;
         speed:integer;
         begintime:string;
         endtime:string;
         Roadname:string;
         roadlen:double;
         roadpoint:Array[0..99]of Proaddot;
         dotcount:integer;
       end;
       Pstainfo=^stainfo;
        stainfo=record
        staid:integer;
        staname:string;
        statype:string;
        longti:double;
        lati:double;
        dx:integer;
        dy:integer;
        strBK:string;
        actiontype:integer;
        stainfo:string;
        stainfopath:string;
        ostainfo:string;
        ostainfopath:string;
        istainfo:string;
        istainfopath:string;
        statrinfo:string;
        statrinfopath:string;
        opstaid:integer;
        end;
      

  4.   

    这个是那类
    class CLASS cc
    {
    public:
    cc();
    virtual ~cc(); void Createcc(int id,结构体指针 p1,int p1个数,结构体指针 p2,int p2个数);private:
    }
    我要用到 Createcc
      

  5.   

    C里面有类?
    C++的东西是DELPHI调用很难,你还是只用C里面的东西吧.
    你翻译的结构体是不对的.
      

  6.   

    我结构体指针p1对应的是Proadline,结构体指针p2对应的是Pstainfo。在delphi 中我这么调用的。
    procedure Createcc(nRoadID:integer;roadline:Proadline;roadcount:integer;stainfo: Pstainfo; stationCount:integer);stdcall;external 'Road.dll';
    我调用时说找不到这个应用程序的输入点
      

  7.   

    你先说你的C文件怎么写的
    看你的delphi代码是看不出来问题的
      

  8.   

    // RoadCreate.h: interface for the CRoadCreate class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_ROADCREATE_H__1726AFA5_9C34_46DD_B638_CEAD061CFD61__INCLUDED_)
    #define AFX_ROADCREATE_H__1726AFA5_9C34_46DD_B638_CEAD061CFD61__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000#include <vector>
    #include <math.h>using namespace std;typedef struct tagFPoint
    {
    float x;
    float y;
    }STRUCT_FPOINT;typedef struct tagRoadAndSubline
    {
    long nSubRoadID;
    long nDx;
    long nDy;
    long nSpeed;
    CString strSTime;
    CString strETime;
    CString strSubRoadDes;
    float fSubRoadLength; STRUCT_FPOINT* subRoadPoints;  
    long nSubRoadPoint;
    }STRUCT_ROADANDSUBLINE;typedef struct tagstationinfo
    {
    long nID;
    CString strName;
    long nType;

    float x;
    float y;

    long nDX;
    long nDY;

    CString strBK;
    long nActionType;
    CString StationInfo;
             CString StationInfoMediaPath;
    CString OutStationText;
    CString OutStationSound;
    CString InStationText;
    CString InStationSound;
    CString StationTransferText;
    CString StationTransferSound;
    long nRelateStationID;
    }STRUCT_STATIONINFO;typedef struct tagroaddata
    {
    long nSubLineID;
    double minx;
    double miny;
    double maxx;
    double maxy;
    long nSpeed;
    CString strSTime;
    CString strETime;
    }STRUCT_ROADATA;class AFX_EXT_CLASS CRoadCreate  
    {
    public:
    CRoadCreate();
    virtual ~CRoadCreate(); void CreateRoadFile(int nRoadID,STRUCT_ROADANDSUBLINE* segmentData,int segmentCount,STRUCT_STATIONINFO* stationData,int stationCount);private:
    int CreateLine(double x1, double y1, 
    double x2, double y2,
    STRUCT_ROADANDSUBLINE &mySubLineInfo,
    bool bSaveEndPoint,int nType,vector<STRUCT_ROADATA>& vRoadData); BOOL WriteDBToRoadFile(int nRoadID,CString strFileName, int nType,vector<STRUCT_ROADATA>& vRoadData,STRUCT_STATIONINFO* stationData,int stationCount);

    //
    void WriteRoadFile10(int nRoadID,CString strFileName,BOOL bLongStation,BOOL bBusMode
    ,vector<STRUCT_ROADATA>& vRoadData,STRUCT_STATIONINFO* stationData,int stationCount);
    void WriteRoadFile20(int nRoadID, CString strFileName, int nWorkMode
      ,vector<STRUCT_ROADATA>& vRoadData,STRUCT_STATIONINFO* stationData,int stationCount);
    void WriteRoadFile30(int nRoadID,CString strFileName,int nWorkMode
    ,vector<STRUCT_ROADATA>& vRoadData,STRUCT_STATIONINFO* stationData,int stationCount);
    void WriteRoadFile40(int nRoadID,CString strFileName,int nWorkMode
      ,vector<STRUCT_ROADATA>& vRoadData,STRUCT_STATIONINFO* stationData,int stationCount);
    //
    void WriteRoadDataToRoadFile(int nRoadID, CString strFileName,vector<STRUCT_ROADATA>& vRoadData);
    void WriteRoadDataToRoadFile40(int nRoadID, CString strFileName,vector<STRUCT_ROADATA>& vRoadData);
    //
    void WriteStationDataToRoadFile10(int nRoadID, CString strFileName, BOOL bLongStation, BOOL bBusMode,STRUCT_STATIONINFO* stationData,int stationCount);
    void WriteStationDataToRoadFile20(int nRoadID, CString strFileName,STRUCT_STATIONINFO* stationData,int stationCount);
    void WriteStationDataToRoadFile40(int nRoadID, CString strFileName,STRUCT_STATIONINFO* stationData,int stationCount);
    //
    float DegreeToMinute(float x);
    void floatsprintf(char *szout, int n1, float x);
    void GetHourMinute(CString strTime, int &nHour, int &nMinute);
    int MapPositionToInt(double x);
    };#endif // !defined(AFX_ROADCREATE_H__1726AFA5_9C34_46DD_B638_CEAD061CFD61__INCLUDED_)
    这个是原来c写的。但不是我写的。我只是根据他写的结构自己定义指针记录,然后调用CreateRoadFile.请高手指教。
      

  9.   

    你用CString的话就别指望通用了.