一个VC写的DLL在delphi7中引用,其中一个函数有个结构体的参数,不知道该怎么用,我按下
面的做法,但是无法编译过去,大家帮我看下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
T_UOSVERSIONINFO = record
dwMajorVersion : DWORD;
dwMinorVersion : DWORD;
dwBuildNumber : DWORD;
end;
var
lpVersionInformation : T_UOSVERSIONINFO ;//就是这个结构体type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
//import,这边是引用VC写的DLL
function NLS_SendSms( lpSms: string ; nSmsLen , nDataType:integer ; lpTelNo :string ):Boolean; stdcall; far;
external 'Rapi.dll' name 'NLS_SendSms'; function NLS_RapiInit ( nPort, nRate: integer; bCompress : Boolean ):HRESULT; stdcall; far;
external 'Rapi.dll' name 'NLS_RapiInit'; function NLS_GetVersion( LPUOSVERSIONINFO : lpVersionInformation ):Boolean; stdcall; far;
external 'Rapi.dll' name 'NLS_GetVersion';
//编译就是上面这句出错
var
Form1: TForm1;implementation{$R *.dfm}end.
--------------------------------------------------
在VC中引用是这么写的,我上面就是把这个改成delphi定义的方式,不知是否有错:
typedef struct _UOSVERSIONINFO
{
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber; 编译版本号
}
UOSVERSIONINFO, *LPUOSVERSIONINFO;
面的做法,但是无法编译过去,大家帮我看下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
T_UOSVERSIONINFO = record
dwMajorVersion : DWORD;
dwMinorVersion : DWORD;
dwBuildNumber : DWORD;
end;
var
lpVersionInformation : T_UOSVERSIONINFO ;//就是这个结构体type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
//import,这边是引用VC写的DLL
function NLS_SendSms( lpSms: string ; nSmsLen , nDataType:integer ; lpTelNo :string ):Boolean; stdcall; far;
external 'Rapi.dll' name 'NLS_SendSms'; function NLS_RapiInit ( nPort, nRate: integer; bCompress : Boolean ):HRESULT; stdcall; far;
external 'Rapi.dll' name 'NLS_RapiInit'; function NLS_GetVersion( LPUOSVERSIONINFO : lpVersionInformation ):Boolean; stdcall; far;
external 'Rapi.dll' name 'NLS_GetVersion';
//编译就是上面这句出错
var
Form1: TForm1;implementation{$R *.dfm}end.
--------------------------------------------------
在VC中引用是这么写的,我上面就是把这个改成delphi定义的方式,不知是否有错:
typedef struct _UOSVERSIONINFO
{
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber; 编译版本号
}
UOSVERSIONINFO, *LPUOSVERSIONINFO;
解决方案 »
- Delphi 如何做到BPL包的过滤?
- 请问怎么屏蔽Regsvr32后弹出的对话框呢?
- 请问如何在数据表当前记录下面插入新记录呢
- 找一个控件,显示树的数据结构,每个节点能有checkbox选择这个节点
- 请指教!在线等!
- 有没有什么工具可以显示一个项目里定义的所有类?
- StringGrid自畫圖片顯示問題 解決後一天之內結貼
- 如何在dbchart中同时显示多条曲线。横坐标是时间,纵坐标是指标值,一条曲线代表一个对象
- 为什么第一次访问数据库的时候总是要求输入用户名密码?
- FastReport求助
- 我认为软件开发人员将会回归delphi.
- 小弟做了2年win32开发,现在有家大公司叫我去做测试,我很犹豫,想请求大家指导一下
dwMajorVersion : DWORD;
dwMinorVersion : DWORD;
dwBuildNumber : DWORD;
end;
function NLS_GetVersion( LPUOSVERSIONINFO : lpVersionInformation ):Boolean; stdcall; far; external 'Rapi.dll' name 'NLS_GetVersion'; 觉得有点怪怪lpVersionInformation 这个类型没有定义嘛, 在结构下加上
lpVersionInformation = T_UOSVERSIONINFO^;
不过是指针入口的话, delphi 可以用 (var UOSVERSIONINFO: TUOSVERSIONINFO) 定义一个引用调用, 反正要得就是个地址还有 far; 有什么用? 这个时代已经没有东东不是 far 了, far, near 只是在 16 位时代的东东, 去掉
function NLS_GetVersion( LPUOSVERSIONINFO : T_UOSVERSIONINFO):Boolean; stdcall;
external 'Rapi.dll' name 'NLS_GetVersion';
function NLS_GetVersion(var LPUOSVERSIONINFO : T_UOSVERSIONINFO):Boolean; stdcall;
external 'Rapi.dll' name 'NLS_GetVersion';
还有个问题,VC的接口中函数的定义:
BOOL PC_callfunc(int nIndex,void *pbuf,int *presult);
我想问下象void *pbuf和int *presult这样的写法在delphi中怎么调用?
或
function PC_callfunc(Index: Integer; var buf; var result: Integer): Boolean;第二种好处是 无类型, 可以是任何东东, 但使用时如果是个指针对像记录加 PointerVariable^