delphi 调用c写的dll

landixin 2008-11-22 02:02:00
请教:我现在要调用c写的dll,我准备建立一个公共单元文件,在该文件中动态调用dll中的东西。现在的问题是:我调用的是dll中一个类下面的函数。请问我在公共单元文件下该怎么调用。然后其它窗体的事件可以用这函数
...全文
231 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你用CString的话就别指望通用了.
landixin 2008-11-23
  • 打赏
  • 举报
回复
我结构体指针p1对应的是Proadline,结构体指针p2对应的是Pstainfo。在delphi 中我这么调用的。
procedure Createcc(nRoadID:integer;roadline:Proadline;roadcount:integer;stainfo: Pstainfo; stationCount:integer);stdcall;external 'Road.dll';
我调用时说找不到这个应用程序的输入点
landixin 2008-11-23
  • 打赏
  • 举报
回复
// 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.请高手指教。
  • 打赏
  • 举报
回复
你先说你的C文件怎么写的
看你的delphi代码是看不出来问题的
  • 打赏
  • 举报
回复
C里面有类?
C++的东西是DELPHI调用很难,你还是只用C里面的东西吧.
你翻译的结构体是不对的.
landixin 2008-11-22
  • 打赏
  • 举报
回复
这个是那类
class CLASS cc
{
public:
cc();
virtual ~cc();

void Createcc(int id,结构体指针 p1,int p1个数,结构体指针 p2,int p2个数);

private:
}
我要用到 Createcc
landixin 2008-11-22
  • 打赏
  • 举报
回复
这是那个结构
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;
suton 2008-11-22
  • 打赏
  • 举报
回复
你总得有C的头文件吧?

贴出来大家看看,说不定某个老大,就帮你把接口写好了.
landixin 2008-11-22
  • 打赏
  • 举报
回复
c的dll文件不是我写的,不过要用到的函数已经export了。
suton 2008-11-22
  • 打赏
  • 举报
回复
在C中,将dll里面类成员函数export.
landixin 2008-11-22
  • 打赏
  • 举报
回复
up

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧