这个vc写的dll的头文件中的数据结构如何用delphi改写(50分)

  • 主题发起人 主题发起人 shambala
  • 开始时间 开始时间
S

shambala

Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个用vc写的dll的头文件中的数据结构,请哪位大虾告诉我在delphi下如何声明?
请注意
myInfo();
~myInfo();
long Load(char* syspath);
这三个函数的定义在dll中。
typedef struct myInfo
{
short sSysDbNum;
short* spDbDegree;
protected:
char* szBuffer;
char** ppcBuffer;
long lBufferSize;
public:
myInfo();
~myInfo();
long Load(char* syspath);
} SYSINFO;
 
//所有的數值類型都改為整數, 因為奔騰更適合處理整數
TMyInfo = class
private
sSysDBNum: Integer;
spDbDegree: Integer;
protected
szBuffer: PChar;
ppcBuffer: PPChar;
lBufferSize: Integer;
public:
constructor Create();
destructor Destroy();
function Load(syspath: PChar);
end;
 
谢谢,积步 大虾
但因为调用dll时要用到上述的数据结构 struct myInfo, 比如这个函数
__declspec(dllexport)
char* MyOperation(SYSINFO* cpSysInfo, /* in */
char* szpLibName, /* in */
long lIsInMemory);
/* in */
而我只是用这个dll而已,没有源码,不能改写有关该dll的任何数据结构或源码;而您的解决方案无法使程序去调用
myInfo();
~myInfo();
long Load(char* syspath);
这三个函数,因为编译器找不到它们的定义,它们的定义在dll中
 
VC++ 里边的结构也可以有方法? 还是这就是个类?
Delphi的强类型就表现在什么就是什么,清清楚楚。
在真正的记录里边是不可能有函数的,最多就是函数指针。
而且记录就是一段内存区域,不可能能够限制访问权限,这只是在编译期的幌子
如果确实是函数指针的话,那么自然简单了(需要调试确认)
否则的话,还有简单的方法就是用VC实现一个封装,把这个东西表示的清楚一些
因为我C++不熟,真的不清楚到底是什么意思
 
是的, c++的结构中也可以有方法。
我也是想如果没有什么好的办法,我就用c++把这个dll重新封装一下
 
function MyOperation(cpSysInfo TMyInfo, /* in */
szpLibName PChar, /* in */
lIsInMemory: Integer) /* in */ : PChar;
-----------------------------------------------------------------------
myInfo();
==== Create();
~myInfo();
==== Free();
long Load(char* syspath);
== Load();
 
最后几个函数
-----------------------------------------------------------------------
myInfo();
==== Create();
~myInfo();
==== Free();
long Load(char* syspath);
== Load();
这样声明是不行的
 
delphi的类怎么会和VC的struct等价,太搞笑了
 
myInfo();
==== Create();构造函数
~myInfo();
==== Free();析构函数 "~"是C++的析构定义
long Load(char* syspath);
== Load();返回LONG的函数
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部