1、求下面VC中数据类型在Delphi中的对应类型~------------------------------------------------
VC中数据类型 Delphi中对应数据类型ATOM
BOOL
BYTE
CHAR
COLORREF
DWORD
Windows句柄
INT, UINT
LONG
LPARAM
LPDWORD
LPINT, LPUINT
LPRECT
LPSTR, LPCSTR
LPVOID
LPWORD
LRESULT
NULL
SHORT
VOID
WORD
WPARAM
--------------------------------------------------
======================================
2、Delphi中的数据类型有什么特殊处?比如说字符串类型有哪些?及其特殊处~或者整形~参考上面提供的VC中的类型(或其它特殊类型)~
======================================
3、Delphi中函数调用约定有哪些?与VC中的__cdecl、__stdcall相同么?如不同有哪些区别?
VC中数据类型 Delphi中对应数据类型ATOM
BOOL
BYTE
CHAR
COLORREF
DWORD
Windows句柄
INT, UINT
LONG
LPARAM
LPDWORD
LPINT, LPUINT
LPRECT
LPSTR, LPCSTR
LPVOID
LPWORD
LRESULT
NULL
SHORT
VOID
WORD
WPARAM
--------------------------------------------------
======================================
2、Delphi中的数据类型有什么特殊处?比如说字符串类型有哪些?及其特殊处~或者整形~参考上面提供的VC中的类型(或其它特殊类型)~
======================================
3、Delphi中函数调用约定有哪些?与VC中的__cdecl、__stdcall相同么?如不同有哪些区别?
2.只有string比较特殊,因为MFC没有此类东西,编译器级的支持让它使用方便又很有效率.
3.一样,没有__前缀,无区别
Extern “C” void __declspec(dllexport) __stdcall ShowMess(HWND hwnd, char* mess);输出格式为:_ShowMess@8,“8”为函数参数字节数为了避免名称分裂,可采用以下方法解决:1.声明中不加__stdcall,采用VC默认格式__cdecl,但在Delphi中要注明调用格式为cdecl。2.在VC工程中添加def文件,如:LIBRARYEXPORTSShowMess @1则DLL中输出函数名称不分裂。Delphi中调用格式:
Procedure ShowMess (h:HWND; mess:PChar); Stdcall;{Cdecl;} external LibName;如无Stdcall或Cdecl声名,Delphi默认Register(FastCall)调用格式。注意Delphi与VC的对齐格式不同,在VC中定义结构时要用以下格式:
#pragma pack(4)//结构定义#pragma pack()常用工具:
TDump.exe-Delphi 4 和 C++ Builder 3 提供Impdef.exe 和 Implib.exe - C++ Builder 3提供DumpBin.exe-VC5.0提供Lib.exe-VC5.0提供VC调用Delphi的DLLDelphi中的声名格式:
Function ShowDialog( hMainWnd:THandle; Msg:PChar ):integer; stdcall;输出到Dll文件中时,名称不分裂。VC中的调用格式:
extern "C" __declspec(dllimport) int __stdcall ShowDialog( HWND hwnd,char* Msg );.如带有__stdcall,则要求Lib文件中对应函数名称分裂,可有以下步骤生成Lib文件:.用Impdef.exe生成def文件,格式为:Impdef def文件名 dll文件名.手工调制def文件参数,如ShowDialog改为ShowDialog@8.用Lib.exe生成lib文件,格式为:Lib /def:def文件名.如声名中无__stdcall,默认调用格式仍为stdcall,但不要求名称分裂,用以下批处理文件MkLib.bat可生成Lib文件:@echo offif %1.==. goto errorimpdef %1.def %1.dlllib /def:%1.defgoto end:errorecho Usage: MkLib DllNameecho Note: Don't add extension ".dll" to parameter "DllName":end
楼主不妨看看BCB的帮助
再在BCB和VC中建立映射关系.
我这个电脑上没装BCB,不好意思.
不能帮你^CV中来了.
1、求下面VC中数据类型在Delphi中的对应类型~------------------------------------------------
VC中数据类型 Delphi中对应数据类型 所在单元ATOM TAtom Windows
BOOL Boolean, ByteBool System
BYTE Byte System
CHAR Char System
COLORREF COLORREF, TColorRef Windows
DWORD LongWord / DWORD System/Windows
Windows句柄 THandle / THandle System/Windows
INT Integer System
UINT UINT / Cardinal Windows/System
LONG LongInt System
LPARAM LPARAM / LongInt Windows/System
LPDWORD LPDWORD Windows
LPINT, LPUINT PINT / PUINT Windows
LPRECT PRect Windows/Types
LPSTR, LPCSTR LPSTR / LPCSTR Windows
LPVOID Pointer System
LPWORD PWord System
LRESULT LResult / LongInt Windows/System
SHORT SHORT / SmallInt Windows/System
WORD Word System
WPARAM WPARAM / LongInt Windows / System
------------------------------
NULL 用于指针是nil System
用于字符串时是''
用于Variant时Null (D5)System/(D6,7)Variant
------------------------------
VOID 声明过程时
c syntax:
void p();
pascal syntax:
procedure p(); 用于声明指针或强制转换时
c syntax:
void *
pascal syntax:
Pointer
--------------------------------------------------
======================================
2、Delphi中的数据类型有什么特殊处?比如说字符串类型有哪些?及其特殊处~或者整形~参考上面提供的VC中的类型(或其它特殊类型)~Delphi中的集合类型,c没有直接的对应物Delphi中的shortint对应于c的signed char
byte 对应于c的unsigned char
char 对应于c的charDelphi中的Boolean/WordBool/LongBool
True值为1
与VC不同的bool不同Delphi中的字符串,
1. short string ansi字符串,长度最大255,索引0为长度字节,无NULL结尾
1. ansi string ansi字符串,长度最大max int,生存期自管理对象,不能使用
索引0检索字符串长度,必须使用Length(),总是以NULL结尾,
使用了reference counted和copy on write技术。
2. wide string unicode字符串,长度最大(max int)/2,除了没有使用
reference counted 和copy on write 技术外,其他同
ansi string
3. c style string 同c的字符串======================================
3、Delphi中函数调用约定有哪些?与VC中的__cdecl、__stdcall相同么?如不同有哪些区别?
Delphi中支持的调用约定Directive Parameter order bc/vc对应物
register Left-to-right __fastcall(类似,但不兼容vc,
Delphi顺序使用eax,edx,ecx,
vc顺序使用ecx,edx,
vc的param order是right->left)
pascal Left-to-right (__far) __pascal(vc已经废弃这种调用约定)
cdecl Right-to-left __cdecl (无可变参数特征)
cdecl; varargs; __cdecl (可变参数特征,但仅用于连接
borland object文件的external声明)
stdcall Right-to-left __stdcall
safecall Right-to-left (无)注,
1.Delphi默认调用约定是regsiter
2.类方法及类对象方法的调用约定与vc恒不同,
Delphi把this(self)储存在eax,vc储存在ecx
3.Delphi计算参数的次序与传递参数的次序无关
不对的地方请指正
调用约定的问题。
默认是regsiter~不是__stdcall?
偶以前一直以为是__stdcall。。