调用C语言动态链接库遇到问题?请帮忙看看 ( 积分: 50 )

  • 主题发起人 主题发起人 dafuwengqing
  • 开始时间 开始时间
D

dafuwengqing

Unregistered / Unconfirmed
GUEST, unregistred user!
调用C语言动态链接库遇到问题?请帮忙看看
implementation
function PrepareModify(answerfilename:pchar;TotalMark:double):integer;
stdcall;external 'Read2.dll' name 'PrepareVBModify';
function ReadModify(sourcefilename:pchar;SubjectNumber:integer):double;
stdcall;external 'Read2.dll' name 'ReadVBModify';

procedure TForm1.Button1Click(Sender: TObject);
var
p:integer;
count:double;
begin
p:=PrepareModify('D:/1.26/阅卷系统/VBM.ans',20);
if p=1 then
begin
count:=ReadModify('D:/1.26/阅卷系统/MODIFY.BAS',1);
showmessage(floattostr(count));
end;
end;
能正常运行但是逻辑上count应该为20而不是0,是不是c中的float在delphi中不能用double替代??
动态链接库头文件如下:
#ifndef READ2_H
#define READ2_H

#ifdef READ2_DLL
#define EXTERN __declspec(dllexport)
#else
#define EXTERN __declspec(dllimport)
#endif

//
extern "C&quot
EXTERN int PrepareVBModify(const char* lpszAnswerFileName,float fTotalMark);
//
extern "C&quot
EXTERN float ReadVBModify(const char* lpszSourceFileName,int iSubjectNumber);
#endif
 
调用C语言动态链接库遇到问题?请帮忙看看
implementation
function PrepareModify(answerfilename:pchar;TotalMark:double):integer;
stdcall;external 'Read2.dll' name 'PrepareVBModify';
function ReadModify(sourcefilename:pchar;SubjectNumber:integer):double;
stdcall;external 'Read2.dll' name 'ReadVBModify';

procedure TForm1.Button1Click(Sender: TObject);
var
p:integer;
count:double;
begin
p:=PrepareModify('D:/1.26/阅卷系统/VBM.ans',20);
if p=1 then
begin
count:=ReadModify('D:/1.26/阅卷系统/MODIFY.BAS',1);
showmessage(floattostr(count));
end;
end;
能正常运行但是逻辑上count应该为20而不是0,是不是c中的float在delphi中不能用double替代??
动态链接库头文件如下:
#ifndef READ2_H
#define READ2_H

#ifdef READ2_DLL
#define EXTERN __declspec(dllexport)
#else
#define EXTERN __declspec(dllimport)
#endif

//
extern "C&quot
EXTERN int PrepareVBModify(const char* lpszAnswerFileName,float fTotalMark);
//
extern "C&quot
EXTERN float ReadVBModify(const char* lpszSourceFileName,int iSubjectNumber);
#endif
 
我看过一片关于C++与Delphi数值类型的资料:
其中说 C++中的double和Delphi中的double一样都是64位浮点数。
Delphi 字长/值域 C++

ShortInt 8位有符号整型 signed char
SmallInt 16位有符号整型 short
LongInt 32位有符号整型 int
Byte 8位无符号整型 unsigned char
Word 16位无符号整型 unsigned short
Integer 32位有符号整型 int
Cardinal 32位无符号整型 unsigned int
Boolean 真/假 bool
ByteBool 真/假 或 8位无符号整型 unsigned char
WordBool 真/假 或 16位无符号整型 unsigned short
LongBool 真/假 或 32位无符号整型 BOOL (WinAPI)
AnsiChar 8位无符号字符 char
WideChar 宽字编码字符 wchar_t
Char 8位无符号字符 char
AnsiString Delphi的字符串类 AnsiString 类
String[n] 老式的Delphi字符串, n = 1..255字节 SmallString 模板类

ShortString 老式的Delphi字符串, 255字节 SmallString<255&gt

String Delphi的AnsiString类 AnsiString
Single 32位浮点数 float
Double 64位浮点数 double
Extended 80位浮点数 long double
Real 32位浮点数 double
Pointer 32无类型指针 void *
PChar 32位字符型指针 unsigned char *
PAnsiChar 32位ANSI型字符指针 unsigned char *
Comp 64位浮点数 Comp 类
OleVariant OLE可变类型值 OleVariant 类
 
后退
顶部