飞道的博客

C++和C#变量对应表

378人阅读  评论(0)

C++ 强制类型转换

static_cast

static_cast<type-id>(expression)

expression 转换为 type-id 类型。

static_cast 是静态类型转换,发生在编译期。这种转换不会进行运行时的动态检查(RTTI),因而这种转换可能是不安全的。

dynamic_cast

dynamic_cast<type-id>(expression)

expression 转换为 type-id 类型,type-id 必须是类的指针、类的引用或者是 void *;如果 type-id 是指针类型,那么 expression 也必须是一个指针;如果 type-id 是一个引用,那么 expression 也必须是一个引用。

dynamic_cast 提供了运行时的检查。对于指针类型,在运行时会检查 expression 是否真正的指向一个 type-id 类型的对象,如果是,则能进行正确的转换;否则返回 nullptr。对于引用类型,若是无效转换,则在运行时会抛出异常 std::bad_cast

const_cast

const_cast 用来去掉表达式的 const 修饰或 volatile 修饰,也就是将 constvolatile 类型转换为非 const 或 非 volatile 类型。

reinterpret_cast

reinterpret_cast 转换直接对二进制位按照目标类型重新解释,非常粗暴,所以风险很高,慎重使用。

C++中的DLL函数原型为

  extern "C" __declspec(dllexport) bool 方法名一(const char* 变量名1, unsigned char* 变量名2)
  extern "C" __declspec(dllexport) bool 方法名二(const unsigned char* 变量名1, char* 变量名2)

C++ 与 C# 数据类型对照表

C++ C#
HANDLE(void *) System.IntPtr
Byte(unsigned char) System.Byte
SHORT(short) System.Int16
WORD(unsigned short) System.UInt16
INT(int) System.Int16
INT(int) System.Int32
UINT(unsigned int) System.UInt16
UINT(unsigned int) System.UInt32
LONG(long) System.Int32
ULONG(unsigned long) System.UInt32
DWORD(unsigned long) System.UInt32
DECIMAL System.Decimal
BOOL(long) System.Boolean
CHAR(char) System.Char
LPSTR(char *) System.String
LPWSTR(wchar_t *) System.String
LPCSTR(const char *) System.String
LPCWSTR(const wchar_t *) System.String
PCAHR(char *) System.String
BSTR System.String
FLOAT(float) System.Single
DOUBLE(double) System.Double
VARIANT System.Object
PBYTE(byte *) System.Byte[]
BSTR StringBuilder
LPCTSTR StringBuilder
LPCTSTR string
LPTSTR [MarshalAs(UnmanagedType.LPTStr)] string
LPTSTR 输出变量名 StringBuilder 输出变量名
LPCWSTR IntPtr
BOOL bool
HMODULE IntPtr
HINSTANCE IntPtr
结构体 public struct 结构体{};
结构体 **变量名 out 变量名 //C#中提前申明一个结构体实例化后的变量名
结构体 &变量名 ref 结构体 变量名
WORD ushort
DWORD uint
DWORD int
UCHAR int
UCHAR byte
UCHAR* string
UCHAR* IntPtr
GUID Guid
Handle IntPtr
HWND IntPtr
DWORD int
COLORREF uint
unsigned char byte
unsigned char * ref byte
unsigned char * [MarshalAs(UnmanagedType.LPArray)] byte[]
unsigned char * [MarshalAs(UnmanagedType.LPArray)] Intptr
unsigned char & ref byte
unsigned char 变量名 byte 变量名
unsigned short 变量名 ushort 变量名
unsigned int 变量名 uint 变量名
unsigned long 变量名 ulong 变量名
char 变量名 byte 变量名 //C++中一个字符用一个字节表示,C#中一个字符用两个字节表示
char 数组名[数组大小] MarshalAs(UnmanagedType.ByValTStr, SizeConst = 数组大小)] public string 数组名; ushort
char * string //传入参数
char * StringBuilder//传出参数
char *变量名 ref string 变量名
char *输入变量名 string 输入变量名
char *输出变量名 [MarshalAs(UnmanagedType.LPStr)] StringBuilder 输出变量名
char ** string
char **变量名 ref string 变量名
const char * string
char[] string
char 变量名[数组大小] [MarshalAs(UnmanagedType.ByValTStr,SizeConst=数组大小)] public string 变量名;
struct 结构体名 *变量名 ref 结构体名 变量名
委托 变量名 委托 变量名
int int
int ref int
int & ref int
int * ref int
*int IntPtr
int32 PIPTR * int32[]
float PIPTR * float[]
double** 数组名 ref double 数组名
double*[] 数组名 ref double 数组名
long int
ulong int
UINT8 * ref byte //C#中调用前需定义byte 变量名 = new byte();
handle IntPtr
hwnd IntPtr
void * IntPtr
void * user_obj_param IntPtr user_obj_param
void * 对象名称 ([MarshalAs(UnmanagedType.AsAny)]Object 对象名称
char, INT8, SBYTE, CHAR System.SByte
short, short int, INT16, SHORT System.Int16
int, long, long int, INT32, LONG32, BOOL , INT System.Int32
__int64, INT64, LONGLONG System.Int64
unsigned char, UINT8, UCHAR , BYTE System.Byte
unsigned short, UINT16, USHORT, WORD, ATOM, WCHAR , __wchar_t System.UInt16
unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT System.UInt32
unsigned __int64, UINT64, DWORDLONG, ULONGLONG System.UInt64
float, FLOAT System.Single
double, long double, DOUBLE System.Double

转载:https://blog.csdn.net/qq_44544908/article/details/128784250
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场