マネージドコードとアンマネージドコ
■マネージ→アンマネージ変換
・String型→char型の格納
[コーディング方法]
String^ strWork = データセット->String型項目名->Trim();
strWork = String::Format("{0, -" + sizeof(格納先構造体->項目名) + "}", strWork);
memcpy(格納先構造体->項目名, (char*)(void*)Marshal::StringToHGlobalAnsi(strWork), sizeof(格納先構造体->項目名));
・int(Int32)型→short int型の格納
[コーディング方法]
Marshal::WriteInt16(IntPtr(&格納先構造体->項目名), 0, (short)データセット->int型項目名);
・int(Int32)型→long int型の格納
[コーディング方法]
Marshal::WriteInt32(IntPtr(&格納先構造体->項目名), 0,
データセット->int型項目名);
・DateTime型→long型の格納
[コーディング方法]
char cDate[8];
String^ strWork = データセット->日付型項目名.ToString("yyyyMMdd");
memset(cDate, 0x00, sizeof(cDate));
memcpy(cDate, (char*)(void*)Marshal::StringToHGlobalAnsi(strWork), sizeof(cDate));
・Byte型→char型の格納
[コーディング方法]
Marshal::Copy(データセット->バイト型項目名,
0,
IntPtr(格納先構造体->項目名),
sizeof(格納先構造体->項目名));
}
・Decimal型→char型の格納
[コーディング方法]
char cMoney[20];
String^ strWork = データセット->Decimal型項目名.ToString();
strWork = String::Format("{0, -" + sizeof(cMoney) + "}", strWork);
memset(cMoney, 0x00, sizeof(cMoney));
memcpy(cMoney, (char*)(void*)Marshal::StringToHGlobalAnsi(strWork), sizeof(cMoney));
・DateTime型→int64型の格納
[コーディング方法]
char cDTime[16];
String^ strWork = データセット->DateTime型項目名.ToString("yyyyMMddhhmmss");
memset(cDTime, 0x00, sizeof(cDTime));
memcpy(cDTime, (char*)(void*)Marshal::StringToHGlobalAnsi(strWork), sizeof(cDTime));
■アンマネージ→マネージ変換
・char型→String型の格納
[コーディング方法]
memset(cWork, 0x00, sizeof(cWork));
memcpy(cWork, 格納元構造体->項目名, sizeof(格納元構造体->項目名));
dr->会社コード = gcnew String(cWork);
・short int型→int(Int32)型の格納
[コーディング方法]
dr->整数データのメンバ名 = 格納元構造体->short intの項目
・long int型→int(Int32)型の格納
[コーディング方法]
dr->整数データのメンバ名 = 格納元構造体->long intの項目
・GDate型→DateTime型の格納
[コーディング方法]
char cbuf[8];
memcpy(cbuf, 格納元構造体->Date型のデータ, sizeof(cbuf));
DateTime ^dtb = DateTime::ParseExact(cbuf,
"yyyyMMdd",
System::Globalization::DateTimeFormatInfo::InvariantInfo,
System::Globalization::DateTimeStyles::None);
dr->DateTime型のメンバ名 = dtb;
・char型→Byte型の格納
[コーディング方法]
array
Marshal::Copy(IntPtr(sceAdjustInfoE00->u_char[]の項目),
Byte配列,
0,
sizeof(Byte配列->Length));
dr->Byte[]のメンバ名 = Byte配列
・int64型→Decimalの格納
[コーディング方法]
char cbuf[8];
memset(cMoney, 0x00, sizeof(cMoney));
memcpy(cbuf, 格納元構造体->Date型のデータ, sizeof(cbuf));
String^ strWork = gcnew String(cMoney);
dr->Decimal型のメンバ名 = Decimal::Parse(strWork);