###前提・実現したいこと
C++で作成されたソースをC#に移植したいと考えているのですが、
ポインターを複数使用されているコードの部分で苦戦しています。
引数等であればref、関数であればunsafeで対応出来るかと思うのですが、
メンバー変数等で保持している部分等はどうすればよいでしょうか。
###移植しようとしているデータ例
C++
1typedef int (*FUNK_DATA)(cData *data); 2 3public class cData 4{ 5public: 6 FUNK_DATA pFunk; // 関数ポインター 7 cData* pBefore; // 前のデータ 8 cData* pNext; // 次のデータ 9 10 int data; 11} 12 13public class cSystemData 14{ 15private: 16 cData* pRealiz; // 先頭のデータアドレス 17 cData** ppStart; // 先頭アドレス 18 int* num; // データ数 19 int max; 20 cData* pEmpty; // 未使用データ 21 22public: 23 bool Init(int num) 24 { 25 max = num; 26 pRealiz = (cData*)MALLOC( sizeof(cData) * max ); 27 ppStart = (cData**)MALLOC( sizeof(cData*) * max ); 28 num = (int*)MALLOC( sizeof(int) * max ); 29 } 30 31 void Create(cData *data) 32 { 33 // 初期化 34 for(i = 0 ; i < max ; i++) 35 { 36 ppStart[ i ] = NULL; 37 num[ i ] = 0; 38 } 39 40 pEmpty = &data[0]; 41 42 for(i = 0 ; i< max ; i++) 43 { 44 if(i == 0) 45 { 46 data[ i ].pBefore = NULL; 47 data[ i ].pNext = &data[ i + 1 ]; 48 } 49 else if( i== max-1) 50 { 51 data[ i ].pBefore = &data[ i - 1 ]; 52 data[ i ].pNext = NULL; 53 } 54 else 55 { 56 data[ i ].pBefore = &data[ i - 1 ]; 57 data[ i ].pNext = &data[ i + 1 ]; 58 } 59 data[ i ].data = 0; 60 } 61 } 62 63 cData* GetStartData(int idx) 64 { 65 return ppStart[idx]; 66 } 67 68 void Change(FUNK_DATA pFunk, cData *data) 69 { 70 data->pFunk = pFunk; 71 } 72} 73
上記のソースをC#に書き換える場合、どのように書き換えれば良いでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/04 10:05
2017/04/04 10:26
2017/04/04 12:30