1. ホーム
  2. シーピー

C#とC++の型対応表まとめ

2022-02-09 07:33:30
<テーブル

Windowsデータ型

NETデータ型

BOOL, BOOLEAN

ブール値またはInt32

ビーエスティーアール

文字列

バイト

バイト

CHAR

シャル

DOUBLE

ダブル

DWORD

Int32またはUInt32

フロート

シングル

HANDLE(およびHFONTやHMENUなど他のすべてのハンドルタイプ)。

IntPtr、UintPtrまたはHandleRef

エッチアールイーサルト

Int32またはUInt32

イント

Int32

ランギッド

Int16またはUInt16

LCID

Int32またはUInt32

ロング

Int32

エルピーラム

IntPtr、UintPtrまたはObject

エルピーシーストアール

文字列

LPCTSTR

文字列

LPCWSTR

文字列

エルピーエスティーアール

文字列またはStringBuilder*。

エルピーティーストレイル

文字列またはStringBuilder

エルピーダブリューエスアール

文字列またはStringBuilder

エルピーブイディー

IntPtr、UintPtrまたはObject

LRESULT

IntPtr

サフィアーレ

NET配列タイプ

ショート

Int16

ティーチェアー

シャル

ユーハー

SByte

UINT

Int32またはUInt32

ユーロン

Int32またはUInt32

バリアント

対象物

VARIANT_BOOL

ブーリアン

WCHAR

シャル

ワード

Int16またはUInt16

ワパラム

IntPtr、UintPtrまたはObject

また,文字列変換を行う場合は,ref int に対応する接頭辞 [MarshalAs(UnmanagedType.LPStr)]lpdword を付加する必要があります。

<テーブル

C/C++

C#

HANDLE、LPDWORD、LPVOID、void*。

IntPtr

LPCTSTR, LPCTSTR, LPSTR, char*, const char*, Wchar_t*, LPWSTR

文字列 [in], StringBuilder [in, out].

DWORD, unsigned long, Ulong

UInt32, [MarshalAs(UnmanagedType.U4)]です。

ブール

ブール

LP<struct>

[In] ref <struct>

SIZE_T

ウイント

エルピーダブリューディー

アウトユーイント

エルピーティーストレイル

[Out] StringBuilder

モジュラージインテージャ

ふつう

ワード

uInt16

バイト, unsigned char

バイト

ショート

Int16

Long, int

Int32

フロート

シングル

ダブル

ダブル

NULLポインタ

IntPtr.Zero

Uint

Uint32

DLLファイルへのC#コールと対応するパラメータ表

<テーブル

Wtypes.hのアンマネージド型

アンマネージドC言語タイプ

ホストクラス名

説明

ハンドル

void*

System.IntPtr

32 ビット Windows オペレーティングシステムでは 32 ビット、64 ビット Windows オペレーティングシステムでは 64 ビットです。

バイト

符号なし文字

System.Byte

8ビット

ショート

短い

システム.Int16

16ビット

ワード

符号なしショート

システム.UInt16

16ビット

INT

int

System.Int32

32ビット

UINT

符号なしint

システム.UInt32

32ビット

LONG

LONG

システム.Int32

32ビット

ブール

長い

システム.Int32

32ビット

DWORD

符号なしロング

システム.UInt32

32ビット

ULONG

符号なしロング

システム.UInt32

32ビット

CHAR

チャー

システム.Char

ANSIで修正。

LPSTR

char*

System.String または System.Text.StringBuilder

ANSIで修正。

LPCSTR

コンストチャージ

System.String または System.Text.StringBuilder

ANSIで修正。

LPWSTR

wchar_t*

System.String または System.Text.StringBuilder

Unicodeで修正しました。

LPCWSTR

コンスタントwchar_t*

System.String または System.Text.StringBuilder

Unicodeで修正しました。

フロート

フロート

システム・シングル

32ビット

DOUBLE

ダブル

システム.ダブル

64ビット

DLL 関数の //C++ におけるプロトタイプは次のとおりです。
  //extern "C" __declspec(dllexport) bool メソッド名1 (const char* 変数名1, unsigned char* 変数名2)
  //extern "C" __declspec(dllexport) bool method name two (const unsigned char* 変数名1, char* 変数名2)

  C++を呼び出す//C#のDLLによって収集されたすべてのデータ型変換メソッドは、重複または複数のソリューションがあるかもしれません、あなたはより多くのことを自分で行うことができます。 テスト
  //c++:HANDLE(void *) ---- c#:System.IntPtr  
  //c++:Byte(unsigned char) ---- c#:System.Byte  
  /c++:SHORT(ショート) ---- c#:System.Int16  
  //c++:WORD(unsigned short) ---- c#:System.UInt16  
  //c++:INT(int) ---- c#:System.Int16
  //c++:INT(int) ---- c#:System.Int32  
  //c++:UINT(unsigned int) ---- c#:System.UInt16
  //c++:UINT(unsigned int) ---- c#:System.UInt32
  //c++:LONG(long) ---- c#:System.Int32  
  //c++:ULONG(unsigned long) ---- c#:System.UInt32  
  //c++:DWORD(unsigned long) ---- c#:System.UInt32  
  //c++:DECIMAL ---- c#:System.Decimal   10進数
  //c++:BOOL(long) ---- c#:System.   ブーリアン
  //c++:CHAR(char) ---- c#:System.  
  //c++:LPSTR(char *) ---- c#:System.String  
  //c++:LPWSTR(wchar_t *) ---- c#:System.String  
  //c++:LPCSTR(const char *) ---- c#:System.String  
  //c++:LPCWSTR(const wchar_t *) ---- c#:System.String  
  //c++:PCAHR(char *) ---- c#:System.String  
  //c++:BSTR ---- c#:System.String  
  //c++:FLOAT(float) ---- c#:System.  
  //c++:DOUBLE(double) ---- c#:System.DOUBLE(double)です。  
  //c++:VARIANT ---- c#:System.Object   対象物
  //c++:PBYTE(byte *) ---- c#:System.Byte[]. 

  //c++:BSTR ---- c#:StringBuilder
  //c++:LPCTSTR ---- c#:StringBuilder
  //c++:LPCTSTR ---- c#:文字列
  //c++:LPTSTR ---- c#:[MarshalAs(UnmanagedType.LPTStr)] string  
  //c++:LPTSTR 出力変数名 ---- c#:StringBuilder 出力変数名
  //c++:LPCWSTR ---- c#:IntPtr
  //c++:BOOL ---- c#:bool   
  //c++:HMODULE ---- c#:IntPtr   
  //c++:HINSTANCE ---- c#:IntPtr  
  //c++:STRUCTURE ---- c#:public struct{};  
  //c++:struct **変数名 ---- c#:out 変数名 //構造体のインスタンス化後の変数名は、C#ではあらかじめ宣言されています。
  //c++:struct & 変数名 ---- c#:ref struct 変数名

  //c++:WORD ---- c#:ushort
  //c++:DWORD ---- c#:uint
  //c++:DWORD ---- c#:int

  //c++:UCHAR ---- c#:int


  //c++:UCHAR ---- c#:byte
  //c++:UCHAR* ---- c#:string
  //c++:UCHAR* ---- c#:IntPtr

  //c++:GUID ---- c#:Guid
  //c++:Handle ---- c#:IntPtr
  //c++:HWND ---- c#:IntPtr
  //c++:DWORD ---- c#:int
  //c++:COLORREF ---- c#:uint


  //c++:unsigned char ---- c#:byte
  //c++:unsigned char * ---- c#:ref byte
  //c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] byte[].
  //c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] Intptr

  //c++:unsigned char & ---- c#:ref byte


  //c++:unsigned char 変数名 ---- c#:byte 変数名
  //c++:unsigned short Variable ---- c#:ushort Variable
  //c++:unsigned int Variable ---- c#:uint Variable
  //c++:unsigned long 変数名 ---- c#:ulong 変数名

  //c++:char 変数名 ---- c#:byte 変数名 //C++では1バイト、C#では2バイトの文字が入ります。
  //c++:char 配列名 [配列サイズ] ---- c#:MarshalAs(UnmanagedType.ByValTStr, SizeConst = array size)] public string 配列名; ushort

  //c++:char * ---- c#:string // パラメータの受け渡し


  //c++:char * ---- c#:StringBuilder// 引数を渡す
  //c++:char * 変数名 ---- c#:ref文字列変数名
  //c++:char *入力変数名 ---- c#:文字列入力変数名
  //c++:char *出力変数名 ---- c#:[MarshalAs(UnmanagedType.LPStr)] StringBuilder 出力変数名

  //c++:char ** ---- c#:文字列
  //c++:char **変数名 ---- c#:ref文字列変数名
  //c++:const char * ---- c#:文字列
  //c++:char[] ---- c#:文字列
  //c++:char 変数名 [配列サイズ] ---- c#:[MarshalAs(UnmanagedType.ByValTStr,SizeConst=array size)] public string 変数名.MarshalAs(UnmanagedType.ByValTStr,SizeConst=配列サイズ); 

  //c++:struct 構造体名 *変数名 ---- c#:ref 構造体名 変数名
  //c++:delegate 変数名 ---- c#:delegate 変数名

  //c++:int ---- c#:int
  //c++:int ---- c#:ref int
  //c++:int & ---- c#:ref int
  //c++:int * ---- c#:ref int /C#で呼び出す前に、int変数名=0を定義する必要があります。

  //c++:*int ---- c#:IntPtr
  //c++:int32 PIPTR * ---- c#:int32[].
  //c++:float PIPTR * ---- c#:float[].

  //c++:double** 配列名 ---- c#:ref double 配列名
  //c++:double*[] 配列名 ---- c#:ref double 配列名
  //c++:long ---- c#:int
  //c++:ulong ---- c#:int
  //c++:UINT8 * ---- c#:ref byte /C#では、バイト変数名を定義してから = new byte()を呼び出す必要があります。  


  //c++:handle ---- c#:IntPtr
  //c++:hwnd ---- c#:IntPtr
  //c++:void * ---- c#:IntPtr   
  //c++:void * user_obj_param ---- c#:IntPtr user_obj_param
  //c++:void * オブジェクト名 ---- c#:([MarshalAs(UnmanagedType.AsAny)]Object オブジェクト名)


  //c++:char, INT8, SBYTE, CHAR ---- c#:System.SByte   
  //c++:SHORT, short int, INT16, SHORT ---- c#:System.Int16   
  //c++:int, long, long int, INT32, LONG32, BOOL , INT ---- c#:System.Int32   
  //c++:__int64, INT64, LONGLONG ---- c#:System.Int64   
  //c++:unsigned char, UINT8, UCHAR , BYTE ---- c#:System.Byte    バイト
  //c++:unsigned short, UINT16, USHORT, WORD, ATOM, WCHAR , __wchar_t ---- c#:System.UInt16   
  //c++:unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT ---- c#:System.UInt32   
  //c++:unsigned __int64, UINT64, DWORDLONG, ULONGLONG ---- c#:System.UInt64   
  //c++:float, FLOAT ---- c#:System.   
  //c++:double, long double, DOUBLE ---- c#:System.  

  //Win32タイプ ---- CLRタイプ   

  //C#ではStructをStructとして再定義する必要があります。
  //コールバック関数はデリゲート、デリゲート静的extern int FunCallBack(string str)でラップする必要があります。

  //unsigned char** ppImage を IntPtr ppImage に置き換えた。
  //int& nWidth は ref int nWidth に置き換えられました。
  //int*, int& の場合、どちらも ref int に置き換えることができます。
  //ダブルピンは型パラメータを指すので,ref IntPtrを使用することができる
  //c++ の関数ポインタ: typedef double (*fun_type1)(double); は c#:public delegate double fun_type1(double) に対応します。
  //char*操作 c++:char*;c#:StringBuilderに対応します。
  //C#でポインターを使用する場合:ポインターを使用する必要がある場所にunsafeを追加する。


  //unsigned charはpublic byteに対応します。
  /*
  * typedef void (*CALLBACKFUN1W)(wchar_t*, void* pArg);
  * typedef void (*CALLBACKFUN1A)(char*, void* pArg)。
  * bool BIOPRINT_SENSOR_API dllFun1(CALLBACKFUN1 pCallbackFun1, void* pArg);
  * として呼び出されます。
  * [UnmanagedFunctionPointer(CallingConvention.Cdecl)]の項参照。
  * public delegate void CallbackFunc1([MarshalAs(UnmanagedType.LPWStr)] StringBuilder strName, IntPtr pArg);
    
  */