delphi 调用c写的dll 请教:我现在要调用c写的dll,我准备建立一个公共单元文件,在该文件中动态调用dll中的东西。现在的问题是:我调用的是dll中一个类下面的函数。请问我在公共单元文件下该怎么调用。然后其它窗体的事件可以用这函数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在C中,将dll里面类成员函数export. c的dll文件不是我写的,不过要用到的函数已经export了。 这是那个结构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; 这个是那类class CLASS cc{public: cc(); virtual ~cc(); void Createcc(int id,结构体指针 p1,int p1个数,结构体指针 p2,int p2个数);private: }我要用到 Createcc C里面有类?C++的东西是DELPHI调用很难,你还是只用C里面的东西吧.你翻译的结构体是不对的. 我结构体指针p1对应的是Proadline,结构体指针p2对应的是Pstainfo。在delphi 中我这么调用的。procedure Createcc(nRoadID:integer;roadline:Proadline;roadcount:integer;stainfo: Pstainfo; stationCount:integer);stdcall;external 'Road.dll';我调用时说找不到这个应用程序的输入点 你先说你的C文件怎么写的看你的delphi代码是看不出来问题的 // 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.请高手指教。 你用CString的话就别指望通用了. 导入java写的webservice,接口文件没有生产相关接口说明? 那位高手会?使STRINGGRID的ROW进行跳动? 工具条问题 如何将Delphi的环境设置恢复到刚安装时的状态? 关于ToolBar的问题。 关于在DELPHI中调用VC++编写的动态链接库的问题 记录类型 stringgrid和dbcombobox的问题 初学者希望有人领路 delphi中如何调用.net服务接口 我用Delphi写了一个DLL封装一个登录窗口老出问题。知道的高手进来瞅瞅 DELPHI7 判断网络是否连接上网
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;
class CLASS cc
{
public:
cc();
virtual ~cc(); void Createcc(int id,结构体指针 p1,int p1个数,结构体指针 p2,int p2个数);private:
}
我要用到 Createcc
C++的东西是DELPHI调用很难,你还是只用C里面的东西吧.
你翻译的结构体是不对的.
procedure Createcc(nRoadID:integer;roadline:Proadline;roadcount:integer;stainfo: Pstainfo; stationCount:integer);stdcall;external 'Road.dll';
我调用时说找不到这个应用程序的输入点
看你的delphi代码是看不出来问题的
//
//////////////////////////////////////////////////////////////////////#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.请高手指教。