C#とC++の型対応表まとめ
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);
*/
関連
-
C# indexof() の使用法
-
C#の遅延関数の使用
-
C#でUSBデバイスを操作する方法
-
Unityがエラーを報告します。コレクションが変更されました。列挙操作が実行されない可能性があります。
-
HTTP エラー 500.22 - 内部サーバー エラー-IIS7 Asp.net2.0 ウェブサイトの実行ソリューションに失敗しました。
-
不正なフォーマットでプログラムを読み込もうとした場合の問題を解決します。
-
vs2010 can't debug, can't enter breakpoint, breakpoint is invalid.
-
System.InvalidOperationException: ConnectionString プロパティが初期化されていません。
-
C# データベース操作エラー。この接続に関連付けられた開いているDataReaderがすでにあり、これを閉じる必要があります...
-
GDI+でジェネリックエラーが発生しました@System.Drawing.Image.RotateFlip
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
C# string.format でのエラー: 入力文字列が正しい形式でない
-
c# - デシリアライズ・エラー。入力文字列が正しい形式でない
-
C#高精度遅延コード実行時間(us/ns)
-
C#の面接質問100選(.net開発者必見)
-
エラーです。コレクションが変更されました。列挙操作が実行されない可能性があります。
-
VS エラー LNK2005:**already defined in **.obj
-
インデックスが配列の範囲外であった。
-
C#のビルドコードで、すべてのコードパスが値を返さないエラーが発生する
-
ASP.NET URL変更によるページ受け渡し
-
AppDomainとAssemblyの動的なロードとアンロード