1read 100read
2012年6月プログラム141: くだすれC++/CLI(初心者用)part2 (548) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【JMF】Java Media APIs【JOGL】 (274)
NetBeans Part6 (767)
テストしにくいコードをテストする方法教えて下さい (389)
【会津】パソコン甲子園2004【若松】 (777)
C#, C♯, C#相談室 Part73 (819)
Androidプログラミング質問スレ Part23 (421)

くだすれC++/CLI(初心者用)part2


1 :10/03/15 〜 最終レス :12/07/04
おそらく、.NET開発でデファクトスタンダードに最も近いであろう
C++/CLIについて語ろうぜ!
このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は Visual Studioスレにお願いします。
前スレッドはこちら
くだすれC++/CLI(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1142144110/l1
dat落ち姉妹スレ
C++/CLI part3
http://pc12.2ch.net/test/read.cgi/tech/1206447234/l1
http://pc11.2ch.net/test/read.cgi/tech/1142147319/l1
http://pc8.2ch.net/test/read.cgi/tech/1126450441/l1
managed C++ やろうぜ!! 002
http://pc8.2ch.net/test/read.cgi/tech/1139043535/l1

2 :
ドキュメントの MSDN には、System::String(SByte*); て書いてあるけども、
System::String(char*); が正解ってことか?
それとも SByte が signed char ではなくて char てこと?それは無いような気が。
ちなみに、使ってる教科書のサンプルプログラムは8bitでは char* 配列を渡してる。

3 :
厳密名の付け方が分かりません
検索しても意味不明なものしか引っかからない

4 :
開発でつかわれてるのかな?
C++/CLIって。

5 :
必要なら使われるだろ。
だからなんなんだ?

6 :
>>3
LINKにある。
/KEYCONTAINER /KEYFILE

7 :
というか必要な時だけ最小限使うもの
基本的に使わないほうがいい

8 :
最近妙にお気に入り

9 :
Managed C++でさえ一部で使われていた。

10 :
フォームの中にあるテキストボックスの内容をmainとか関数とかから書き換えたいんだけど
どんな方法があるでしょうか?
今までは強引にチェックボックスにチェックが入ると
void test(System::Windows::Forms::TextBox^ tb_log_view);
こんな感じの関数呼び出してTextBoxを強引にわたして指定の処理して
テキストボックスにメッセージ表示させてたんだけど
何せ使い勝手が悪いので・・・

11 :
String^使えばいいんちゃう?

12 :
今、「Cで書かれたライブラリをC++/CLIでラッピング(DLL化)し、
C#で使おう」という目的に向けて、Cのライブラリをラッピング中ですなのですが、構造体で悩んでます。
C++/CLI側でC#側に「構造体の配列」を返す関数が見せてるのですが、実行すると思ったように動きません。
C++/CLI側
[宣言]
public ref struct SampleStruct {
  static CHAR cUpdate;
};
static array<SampleStruct^>^ pstSample = gcnew array<SampleStruct^>(10);
関数
array<SampleStruct^>^ hogehoge(){
  if(pstSample[0] == nullptr ){
    for(int i=0; i<10; i++ ){
      pstSample[i] = gcnew (SampleStruct);
    }
  }
  pstSample[2]->cUpdate = 2;
  return pstSample;
}
C#側
SampleStruct[] stTest = new SampleStruct[10];
stTest = LIBSAMPLE.hogehoge();
ここで、stTest[0].cUpdateからstTest[9].cUpdateまでを見ると
全部2が入っております。(本当は[2].cUpdateだけ2が入っていて欲しい)
どこが原因か分かりますでしょうか?
OS:XP
環境:VS2008 ExpressのC++版とC#版を使ってます。

13 :
>  static CHAR cUpdate; 
Cさえ理解していないのがよくわかる。

14 :
うわ・・・・・
泣ける・・・・orz
回答有難うです

15 :
突っ込みどころや怪しい箇所が多すぎて、どうしたいかが見えてこない(笑
配列はC++/CLIでアロケーションしていいのかとか。
C#でいう構造体はvalue class (or struct)であって、ref structはクラスだけどどっちにしたいのとか。

16 :
目的は、「Cで書かれたライブラリをC#で使う」事なのですが、
現状は、Cの方には手を加えないように、やる方法として、C++/CLIで
ラッピングするという手段があるという事なので、作業している次第。
そこで、構造体のポインタを戻り値としている関数はどう扱えば?と
思ってましたら、
http://ap.atmarkit.co.jp/bbs/core/fdotnet/17380
このような話をみつけたので、まずはref structでやってるという状況です。

17 :
CのライブラリだったらC++/CLIなんか使わずにC#でDllImportすればいいような

18 :
>>17
説明不足でした。
(当然の疑問ですよね)
そのCのライブラリというのが、元がスタティックしか考慮されておらず、
DLL用にはなってなく(__declspec(dllexport)のような記載は一切なし)、
選択肢として
1 Cのソースをdll対応に修正(__declspecを全関数に追加)
2 元のCには手を加えず、新しくラッパーを作る
があり、今後もCの方は勝手にバージョンが上がっていくので、
それなら、元のソースに手を加えない方向でやろうとなった次第です。

19 :
だからってそのラッパーをC++/CLIで書く必要はないだろ
Cで薄ーいラッパー書いて普通のネイティブDLLとしてコンパイルすればおk
C++のライブラリとなると面倒だけどそうでないならC++/CLIはできるだけ避けたほうが賢明

20 :
>>19
その手がありましたか!
C#でDllImportして、
DLL関数に渡す構造体、DLL関数から受け取る構造体は
[StructLayout(LayoutKind.Sequential)]を用いてC#側に定義して
やりとりするという事ですね。
試してみます

21 :
【初心者歓迎】C/C++室 から誘導されてきました。
Form1とForm2があり、Form1からForm2を呼び出すようにしています。
また、Form2に配置したボタンを押すと関数が呼び出されて、所望の処理をするようにしています。
以下の2点について教えてください。
1.関数内の処理の進捗をForm2内のLabelやProgressBarに表示したいです。
2.Form2からForm1を操作したい(Form2のボタンを押すとForm1/Form2ともに終了するようにしたい)です。
両方ともポインタを使えば出来そうな気がするのですが、例えば2.の方ではForm2を指すポインタの宣言の仕方が
わからないです。
よろしくお願いします。

22 :
>>21
ポインタじゃなくて参照になる。
Form2^ form2;

23 :
>>21
動くかどうかは試してない。
【Form1.h】
ref class Form1 {
public: System::Void Form1Func() {〜}
private: System::Void Form2Func();
private: System::Void Form1_KeyDown(〜) {Form2Func();}
}
【Form1.cpp】
#include "Form1.h"
#include "Form2.h"
System::Void Form1::Form2Func(){
Form2^ form2 = safe_cast<Form2^>(Application::OpenForms["Form2"]);
form2->Form2Func();
}
【Form2.h】
ref class Form2 {
public: System::Void Form2Func() {〜}
private: System::Void Form1Func();
private: System::Void Form2_KeyDown(〜) {Form1Func();}
}
【Form2.cpp】
#include "Form1.h"
#include "Form2.h"
System::Void Form2::Form1Func()
{
Form1^ form1 = safe_cast<Form1^>(Application::OpenForms["Form1"]);
form1->Form1Func();
}

24 :
>>22>>23
ありがとうございます。
残念ながらうまくいかないです。
環境はVS2005 C++ WinXP SP3
Form1(親フォーム)からはForm2.hをインクルードして
Form2^ frm = gcnew Form2();
frm->ShowDialog();
とできるのですが、Form.hではForm1.hをインクルードすると循環参照になってしまうようでエラーになります。
また、Form2.h内で関数宣言だけしてForm2.cpp内でForm1.hをインクルードして実行部分を書こうとしましたが
Form2.h内の関数宣言(>>23のprivate: System::Void Form1Func();にあたる部分)がコンパイルエラーになってしまいます。

25 :
なんでこういう意味での初心者がC++/CLIなんてマニアックな言語触ってるんだろう……?
> Form2に配置したボタンを押すと関数が呼び出されて
> 1.関数内の処理の進捗をForm2内のLabelやProgressBarに表示したいです。
Form1関係ないよね? Form2が勝手にやってろって話
> 2.Form2からForm1を操作したい(Form2のボタンを押すとForm1/Form2ともに終了するようにしたい)です。
Form1がForm2を作ったとき、Form2のFormClosedイベントに引っかけるとかすればいいんじゃね?
// Form1内のForm2を表示させる処理
Form2^ form = gcnew Form2();
form->FormClosed += gcnew FormClosedEventHandler(this, &Form1::OnForm2Closed);
form->Show();
// Form1内で定義
private: void OnForm2Closed(Object^ sender, FormClosedEventArgs^ e) {
  this->Close();
}
×アイコンで閉じたときはForm1は閉じない、ボタン押したときだけとかなら
Form2にCloseWithParentみたいなプロパティ用意して
表示させるときのForm2^はメンバ変数に保持しておいて
OnForm2Closedで確認

26 :
C++/CLIだと、Cのランタイム例外のハンドリングが出来ない臭いんだけど、どうすれば良いんだろう…
ハンドラ設定してるのに動いてくれない
例えば_tcsftime(..., L"%h", ...);みたいなやつ
※普通の例外じゃないんで、マネージand/orネイティブでもtry catch出来ない

27 :
そもそもCRTが例外なんて投げないはずだが
> 727 :デフォルトの名無しさん[sage]:2008/07/03(木) 13:51:22
>     なんで、VC++2008の、strftime _tcsftimeは、
>     書式に無い文字を渡すと例外終了するのかなあ。
>    単に無視してくれりゃいいのに。
>    自前でパースしてから、渡してやるしか無いのかな。
> 729 :デフォルトの名無しさん[sage]:2008/07/03(木) 14:11:02
>     ちょっと見てみたけど
>     _ASSERTE( ( "Invalid format directive" , 0 ) );
>     だからデバッグ時だけの話じゃん。

28 :
>>27
http://msdn.microsoft.com/ja-jp/library/ksazx244(v=VS.80).aspx
試してみると早いかも…
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
tm tmNow;
__time64_t tNow;
TCHAR sz[20];
try
{
_time64(&tNow);
_localtime64_s(&tmNow, &tNow);
_tcsftime(sz, 20, L"%h", &tmNow);
}
catch (...)
{
Console::WriteLine("error!");
}
Console::ReadLine();
return 0;
}

29 :
ハンドラ設定ってなんだ普通に_set_invalid_parameter_handlerで呼んでくれたが

30 :
SerialPortクラスを使ってデータを受信する際、
・SerialPort::Data_Receivedイベントで受信
・受信データはQueueクラス経由でメインスレッドから受信
・メインスレッドでは、あるバイト数を数秒以内に受信できない場合タイムアウト
を、実装したいのですが、タイムアウト処理はどのように記述したら良いのでしょうか?
// Data_Receivedイベント
private: System::Void serialPort_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e)
{
int length = serialPort->BytesToRead;
array<unsigned char>^ buffer = gcnew array<unsigned char>(length);
serialPort->Read(buffer, 0, length);

Queue^ sync_queue = Queue::Synchronized(m_queue);
for (int i = 0; i < length; i++)
{
sync_queue->Enqueue(buffer[i]);
}
}

31 :
マネージクラスのインスタンスをグローバルスコープっぽく参照する方法ないの?
全コンストラクタでやりとりするようなマンドクセ方法がいやだ

32 :
クラスの静的メンバに入れとけばいいだけ

33 :
あと public static ね

34 :
C++/CLIに書き換えてる奇特なものです
char www[100];
char* ptr;
ptr = www + i;
array<char>^ www = gcnew array<char>(100);
array<char>^ ptr;
ptr = www + i; ← ?
?の部分をご教授くださいm(_ _)m

35 :
CLI配列はポインタじゃないから無理

36 :
pin_ptr してもいいけどさ、www[i] で駄目な理由は何なの?

37 :
C++の感覚なら毎回[i+a]としないで最初からオフセット付けときたいのは当然だろ
無理なので常にwwwとiをセットにして持ちまわるのが普通
メソッドの引数にもオフセットを指定できるようにする

38 :
perlのように return a, b できるようにしてくんないかな

39 :
.NET4ではTuple型自体は導入されたのでC#やVBでは将来的に
言語レベルでサポートされる可能性はある。
C++/CLIはほぼ見捨てられてるので期待するだけ無駄。

40 :
>>34
array<char>^ www = gcnew array<char>(100);
interior_ptr<char> ptr;
ptr = &www[0] + i;

41 :
VC2010 EEを使用しています。
RS-232Cで通信を行い、プログラムを終了させようとして
this->Close();
を行うと、エラーメッセージも出ないままプログラムが固まってしまいます。
ポートを閉じてないことが原因かと思い、
serialPort1->Close();
を実行してみたところ、今度はここで同じように固まってしまいました。
http://vsug.jp/tabid/63/forumid/46/postid/9991/scope/posts/Default.aspx
を、参考に、BeginInvokeを使用していますが、ダメでした。
この場合、どこを見れば良いのでしょうか?
よろしくお願いします。

42 :
画像処理を行いたいのですが、
Bitmap、Image、Graphic・・・どのコンポーネントを使うのがお得なのでしょうか

43 :
>>42
どんな画像処理をするかが分からないと、
えらべないと思われます

44 :
カラー画像をモノクロにしたり、コントラストかけたり、拡大縮小したりの初歩的なことがしたいです。
あと、今のところはCUIで行いたいです。

45 :
>>44
俺はあまり詳しくないが、
ぐぐると
ttp://msdn.microsoft.com/ja-jp/academic/cc998604.aspx
ここで
Bitmap クラスを利用することにより、画像に対してピクセル単位で様々な処理を行うことができます
と書いてある
.netのクラスを使うなら、おそらくやりたいことはこういうことだろう

46 :
Bitmap使ってみたけれど、画像の保存の仕方がわからない・・・
WriteBitmap("C:\\・・・",data)とかdata.Save(・・・)ってな感じでできないのかな

47 :
普通にSaveメソッドあるだろ

48 :
ホントだ。ごめん、見逃してたわ。

49 :
なぜ下記のようなプログラムでエラーが発生するのかわかりますか??
 --- プログラム ---
#include "stdafx.h"
using namespace System;
using namespace System::Drawing;
int main(array<System::String ^> ^args){
  Bitmap^ image = gcnew Bitmap("test.jpeg");
  image->SetPixel(0,0,Color::Black);           ←ここでなぜかエラー起きます
  image->Save("test2.bmp");
  return 0;
}
 --- エラー内容 ---
ハンドルされていない例外: System.ArgumentException: 使用されたパラメータが有効ではありません。
場所 System.Drawing.Bitmap..ctor(String filename)
場所 main(String[] args) 場所 c:\documents and settings\***\デスクトップ\test\test.cpp:行 10
場所 mainCRTStartupStrArray(String[] arguments) 場所 f:\dd\vctools\crt_bld\self_x86\crt\src\mcrtexe.cpp:行 309

50 :
>>49
test.jpegはちゃんとプロジェクトファイルと同じ階層にある?
余計なお世話かも知れないが、.netでやるなら
C#で作ったほうが楽なんじゃないだろうか・・・
わざわざマイナーな環境で挑戦するよりもいいと思うんだが

51 :
>>49
落ちてる場所は、その上の行だぞ。

52 :
これだけ利用者に嫌われてる言語も珍しいな
初心者が質問するたびに使うなと勧められる

53 :
>>50-51
ありがとう。jpegじゃなくてjpgだったという凡ミスしていたことに気づけたわ
・・・一度C#に浮気してみる

54 :
>>52
嫌われているというか、言語自体が初心者お断りだからな
初心者が無謀なことしようとしていたら、そりゃ止めるだろう

55 :
C++も.NETも使いこなせる人が、止むを得ず使うための物。
使わなくていいなら使いたくない。

56 :
始めようにも資料が無さ過ぎる
MDI作るときどうするかとか
ちょっとしたことの逆引きがネット上で全く出てこない
ようやくOpenGL表示できるようになって
C++の頃の遺産をつかえると思ったのに

57 :
C#でできるから、それを参照にすればいい
なにもかもC++/CLIで済ませようとしないことをお勧めする

58 :
嫌ってはいないんだ
ただ何故かこの言語とのファーストコンタクトというか接し方が
一言入れておかないと不幸にしかならなそうな人が多いのよね

59 :
WinFormsデザイナとかC++/CLIにそもそも要らないんだよな
こういうのがあるから「Visual C++ 2008 で簡単GUIプログラミング」みたいな勘違い本やサイトが出て初心者が道を間違える

60 :
56ですが自分
C++の文法がある程度使えて
フォームデザインが総合開発環境上で扱えて
至れり尽くせりじゃん、と思ってとっかかりました
現実は情報が全く無く
よくわからないクラスとかいっぱいあって
解説も無くて
どうしようと途方にくれていましたが、QTとかよりは
導入コストも再勉強のコストも無いだろうと信じて使ってます。
だって、CやC++だとGUI作るの辛いんだもん
っていう理由だとダメですか

61 :
まあ正直C++の名前が付いてるだけで
マネージ部分はC++とは直接関係なくて学び直し必要だし
それなら素直にC#
C#2.0の範囲までなら多分C++/CLIより簡単だし
サンプルも多いし将来WPF/Silverlightとかにも応用できるし
C#やっとけば逆にC++/CLIを橋渡し用ぐらいなら書けるようになるし

62 :
けっきょくC++風に文法を汚したC#と普通のC++を無理矢理くっつけただけの代物だからな

63 :
>>62
それを一応形にできたところは評価できる。

64 :
#define健在なり

65 :
#define private public

66 :
LPVOIDからarray<String^>^に変換したいのですが、アドバイスください。
//////////Form1_Load//////////
HANDLE hMap;
LPVOID lpBuf;
hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,L"View");
if(hMap==NULL){Form::Close();}
lpBuf=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpBuf==NULL){Form::Close();}
if(GetLastError()==ERROR_ALREADY_EXISTS){//すでに同じ名前のオブジェクトが存在する
lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー
///////////ここまで/////////////
つまり二重起動時に共有メモリを使いたいのですが、どうしてもできません。
先人方どんなことでもいいので教えてくだせえ。

67 :
marshal_asとかじゃねえの

68 :
> LPVOIDからarray<String^>^に変換したい
>  lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー
コードの方はarray<String^>^からLPVOIDに変換したいように見える

69 :
>>67
2008 Express Editionを使っていまして・・・ヘッダーがないらしいです。
http://www.codeguru.com/forum/showthread.php?t=468408
>>68
コマンドライン引数を得た後、array<String^>^に変換しようと思ったのです。
宣言時からarray<String^>^だとMapViewOfFileでつまずいちゃうので・・・。
どちらにせよ、コマンドライン引数を得た後、
共有メモリarray<String^>^として反映できればいいのですが。

70 :
全体にコードが滅茶苦茶に見えるし
そもそもLoadイベントなんかでやる処理には見えないけど(mainでやることだろ)
共有メモリにString^を書き込みたいのなら
> ttp://www.codeguru.com/forum/showthread.php?t=468408
のリンク先にString^をポインタに変換する方法が載ってるからmemcpyなりなんなりすればいい
複数の文字列を書き込む必要があるなら\0なりなんなりで区切る

71 :
共有メモリをやめてSendMessageに妥協しました
とにかく二重起動時にコマンドライン引数を渡すことができました!
皆様、貴重なアドバイスをありがとねん

72 :
C++/CLIにおけるsafe_cast,static_cast,dynamic_castの違いについて教えてくださいよ
safe_cast   :型が合わないと例外が発生、実行コスト中
dynamic_cast:型が合わないとNULLを返す、実行コスト大
static_cast  :型が合わなくても何もしない、実行コスト小
この認識であってますか?

73 :
safe_castとdynamic_castのコストはほぼ同じ。
static_castが速くなるのはダウンキャストの場合だけ。静的に解決できる場合はsafe_castと同じ。

74 :
>>66
いまさらだけど、.NET Framework 4以降ならMemoryMappedFileクラスを使えばいいと思うよ。

75 :
.NETのハンドルのダウンキャストにstatic_cast使うのは激しく疑問
公式の説明でもパフォーマンスをえらく強調してるが、
そのためにわざわざ検証不能コードにしてまでやるほどのものなのかと

76 :
http://www.infoq.com/jp/news/2010/10/Co-Evolution-Doubts
>どうやらそれらは、レガシC++アプリケーションをWindows Phoneに移植したいと考えている多くの開発者にとって、C++/CLIは、ベストなルートに見えるのであろう。
地獄への道は善意で舗装されている

77 :
筆者自身は否定的に見えるけど、まだそんなこと考えてる人もいるんだねぇ

78 :
筆者ほんとにC++/CLI触ったことあるのかな
Silverlightで使える範囲のC++/CLIはC++とは全く互換性なくてただの汚いC#なんだけど

79 :
絶対的処理性能が必要な場合か、過去資産使う時以外はメリットよな?

80 :
検証可能なコードしか使えない場合は処理性能同じだし過去資産も使えないよ

81 :
音の再生ってC++/CLIでできるの?
画像の場合ピクチャボックスみたいな感じに楽に音楽再生させたいのだけど

82 :
ネイティブのC++でできるなら同じ方法でできる
.NET使ってもできる
どちらにしてもC++/CLIとは直接関係ない話

83 :
サンクス
これ絶対初心者向けじゃない気がする

84 :
「気がする」ではない。
絶対初心者向けではない、その通りだ。

85 :
ですよね
俺みたいな勘違い君が集まるから
スレタイ変えると平和になる気がする

86 :
「C#でアプリを作っているが、C++のライブラリで音を鳴らしたい」もしくは
「C++(非CLI)でアプリを作っているが、.NETのライブラリを使って音を鳴らしたい」
→そこだけC++/CLIを部分的に使おう
という風に特別な意図を持って言語であって、
>>81のような質問が出てくる時点でC++/CLIを使うのは間違っている

87 :
前者はCLIでなくていいだろ

88 :
そんなに大きなライブラリでなければ>>19方式がベターだな

89 :
初心者用のC++/CLIじゃなくて
C++/CLIの初心者向けのスレなんだよなw

90 :
C++/CLI初心者にクラスチェンジできる条件が、
1) C++習得レベル一定以上
2) .NET習得レベル一定以上
だからな

91 :
C++とC#があった上で補助的に使うもんだからねぇ
みんな言うように初心者が使う物じゃないね。

92 :
こんなのに熟練したくないわ
どうしても必要なときにちょっと調べてその場が凌げれば充分

93 :
C++にGCを導入した言語。そう考えれば実用性は高いはず。

94 :
C++と、GCをサポートした別の言語を混ぜた言語。
アンマネージとマネージの境界は常に意識する必要がある。

95 :
仕事では使いたくないが、趣味でいじるのなら楽しい。
Express Editionだと実行中のプロセスにアタッチできるのが
C++しかないってのも使ってる理由のひとつ。

96 :
日経のムックでC++/CLIが宣伝されてるな。
簡単GUIプログラミング!みたいな見事な勘違い記事だった。騙されて道を誤る初心者が不憫でならない。

97 :
道を踏み外しそうになり、C++Builderにシフトできました

98 :
初心者はC#いじっとけ

99 :
増えた言語仕様って、ref, ^, gcnew だけでしょ?

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
Visual Studio IDE環境 (547)
今はじめるプログラミング言語をさがすスレ (508)
くだすれC++Builder(超初心者用)その5 (206)
いまだに LZH で配布してるヤツって何なの? (302)
SSE AVXのプログラミング (636)
バカボンのDelphi不買・販促・その他談話室その29 (961)
--log9.info------------------
結局複合機って最高は? (817)
資源有効活用、ハードオフで見たプリンター (747)
1万以下 HP PSC 1510 オールインワン複合機 2台目 (800)
【EPSON】 PM-T960 【複合機】 (512)
ドットインパクトプリンタ (723)
【MAXART】 PX-5500 4台目 【玄人専用】 (256)
キャノンさん、日本人を滅ぼさないで下さい (300)
【Canon】 PIXUS MP950 Part.2 (620)
Canon BJC-400/410/420/430 BJF200/210 etc (311)
CANON最新複合機 PM370・360 その1 (794)
カシオディスクタイトルプリンタ総合スレ★4 (243)
// EPSON 複合機 PM-A900 系スレ // (851)
プリンタの修理費 (203)
【Canon】小型フォトプリンタ【SELPHY】 (650)
{{無線}} 家庭用プリンタこそLAN接続[有線] (502)
PM-760C (471)
--log55.com------------------
☆タンポポ主義者宣言(嫁不足?)
イライラが止まらない
血液型と性格は全く関係ない
トンキン嫌いです!
人格異常者
今の日本アニメどう思う?
俺を論破してみろよ
「嫌なら見るな」に言い返せない