私はいくつかの C コードを持っており、C# から使用しようとしています。ほとんどの変換が行われます。ただし、いくつか問題があります。
「C」コードの一部は次のようになります。
typedef struct r_GetCPL {
UInt8 Storage;
UInt8 Key[16]; //(1)
UInt8 *Buff; //(2)
Array16 *CryptoKeyIDs; //(3)
} REPLY_GETCPL;
「C」で定義されたエイリアス
typedef unsigned char UInt8;
typedef unsigned short UInt16;
typedef unsigned long UInt32;
typedef unsigned long long UInt64;
typedef UInt8 Array8[8];
typedef UInt8 Array16[16];
typedef UInt8 Array32[32];
typedef UInt8 Array64[64];
typedef UInt8 Array128[128];
typedef を直接の構造体定義に置き換えることができると仮定しています。これでいいですか?私が定義した同等の C# 構造体は、
public struct REPLY_GETCPL
{
Byte Storage;
Byte[16] Key; //(1) Is this right?
UInt8 *Buff; //(2) What is the equivalent?
Array16 *CryptoKeyIDs; //(3) What is the equivalent?
}
また、私が立ち往生しているインポート方法がいくつかあります
void hex_print(char* data, UInt32 length);
DRMKLVItem *NewDRMKLVItem(UInt32 lenBuff, UInt32 cmdId);
RESULT DRMKLVLengthDecode(const UInt8 *s, UInt32 *pLen);
C#
//I think this one is defined right
[DllImport("DoremiSource.dll")]
public static extern void hex_print([MarshalAs(UnmanagedType.LPStr)]string data, UInt32 length);
//(How to convert the function return type?)
[DllImport("DoremiSource.dll")]
public static extern DRMKLVItem *NewDRMKLVItem(UInt32 lenBuff, UInt32 cmdId); //(4)
//(How do i convert the function parameters here)
[DllImport("DoremiSource.dll", CharSet = CharSet.Ansi)]
public static extern int DRMKLVLengthDecode(const UInt8 *s, ref UInt32 pLen); //(5)