- - PR -
Visual C#でBCB5.0で書かれたDLLを利用できますでしょうか?
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-07-07 21:42
最近、C#をかじり中なのですが、BCB5.0で作ったDLLをC#から呼び出したいのですが、どうしてもうまくいきません。なんとか、DLLの中の関数は利用はできているみたいなのですが、思っているような動作をしてくれません。よろしかったら、アドバイスお願いします。
-----------------------message.dll(BCB5.0で作成)----------------------------- extern "C" __declspec(dllexport) void WINAPI SetInt(char*, int, int, int); void WINAPI SetInt(char* buffer, int size, int position, int value) { if(size < position + sizeof(int)) return; memcpy(&buffer[position], &value, sizeof(int)); }; ------------------------------------------------------------------------------- 上は、DLLの一部(使いたい関数を抜粋しました。)です。buffer配列にポジションとサイズを与えて、valueを書き込ませています。 ------------------ test.cs(C#で作成したテストプログラム)----------------------- public class ConcurrentorMessageCS { //関数宣言 [DllImport("DataRW.dll")] public static extern void SetInt(ref byte buffer, int size, int position, int value); private byte[] Buffer = new byte[100]; int value=12; int position=0; //とりあえず頭に書き込みます。 //ここで使用 SetInt(ref Buffer[0], 4, position, value); //int型は、4バイトなので直接いれてます。^^; } ------------------------------------------------------------------------------- 上がテストプログラムです。 コンパイルは通りますが、Buffer配列に何も残りません。どこが怪しいか是非ご教授お願いいたします。それと、4などとかっこわるい書き方でなく、C言語のsizeofみたいなスマートの書き方あったら、お願いします。(sizeofは、C#では、unsafeコードでしか使えませんよね!? unsafeコードはスマートなんでしょうか?) | ||||||||||||
|
投稿日時: 2004-07-07 21:51
StringBuilderを使えば良いのでは?
| ||||||||||||
|
投稿日時: 2004-07-07 23:08
できれば、byte配列で完成させてみたいのですが、byte配列では、ちょっと無理がありますでしょうか?
| ||||||||||||
|
投稿日時: 2004-07-08 01:24
とりあえずここは
こうかな。 sizeofについては気になるのなら
ぐらいでいいかと。 | ||||||||||||
|
投稿日時: 2004-07-08 19:44
yaさん、ありがとうございました。
refをはずしてみて、実行しましたら、うまくFBuffer配列にデータをいれることができました。 refは、なくてもよかったんですね。ついつい、C#にポインタがないことばかり意識していまして、関数の配列渡しを忘れておりました。^^; [ メッセージ編集済み 編集者: かったろう 編集日時 2004-07-08 19:52 ] |
1