おそらく、.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
くだすれC++/CLI(初心者用)part2
レス数が900を超えています。1000を超えると表示できなくなるよ。
2010/03/15(月) 09:41:19
818デフォルトの名無しさん
2014/03/23(日) 23:19:57.49ID:ZHSALumd これってコンパイル通る?>>817の方。
819デフォルトの名無しさん
2014/03/23(日) 23:36:35.34ID:HlHPSHO4 >>818
817もコンパイルは通ります
あと、今試してみたんですが出来上がったexeファイルを起動してみると
「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。(中略)
オブジェクト参照がオブジェクトインスタンスに設定されていません」
と出ますね……
こちらもまたtest->GetArrayA(0);の部分をコメントアウトすると問題なく起動します
817もコンパイルは通ります
あと、今試してみたんですが出来上がったexeファイルを起動してみると
「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。(中略)
オブジェクト参照がオブジェクトインスタンスに設定されていません」
と出ますね……
こちらもまたtest->GetArrayA(0);の部分をコメントアウトすると問題なく起動します
820デフォルトの名無しさん
2014/03/24(月) 01:02:03.43ID:XCyA/SAw test =gcnew 以下略つけてみたら?
821デフォルトの名無しさん
2014/03/24(月) 01:50:12.79ID:Ae/Hf3r6822デフォルトの名無しさん
2014/03/24(月) 11:45:41.86ID:R2MpMn2O デバッガ使えない環境なのかな、、、
例外起きた時は出力ウィンドウに出るぜ
例外起きた時は出力ウィンドウに出るぜ
823デフォルトの名無しさん
2014/04/26(土) 12:11:13.54ID:J0aLOZMr c#のdynamic型に相当するものを
c++/cliで何と書けば良いですか?
c++/cliで何と書けば良いですか?
824デフォルトの名無しさん
2014/04/27(日) 21:57:27.97ID:t/xZR1S/ 多分無い
825デフォルトの名無しさん
2014/05/09(金) 18:40:24.14ID:avbF2wuD c++/cli勉強したいと思っています。
>>array<a^>^ array_a;
の<a^>^ってどいういう意味ですか?
顔文字に見えます。ググりたいのですが^>^でググっても
ヒットしません。キーワードを教えてけろ。
>>array<a^>^ array_a;
の<a^>^ってどいういう意味ですか?
顔文字に見えます。ググりたいのですが^>^でググっても
ヒットしません。キーワードを教えてけろ。
826デフォルトの名無しさん
2014/05/09(金) 18:46:04.26ID:Mn4+ksrv トラッキングハンドル
827デフォルトの名無しさん
2014/05/09(金) 19:05:13.77ID:avbF2wuD >>826
ありがとうございます。さっそくググってみます。
ありがとうございます。さっそくググってみます。
828デフォルトの名無しさん
2014/05/11(日) 22:02:14.61ID:OFkZfhFe 参照型を内部に保持するコンテナの参照を宣言かな。
829デフォルトの名無しさん
2014/05/13(火) 09:25:37.06ID:QKhoqLLT ジェネリックメソッドの継承がうまく行きません。
generic<typename T> ref struct B;
ref struct A abstract {
generic<typename U> virtual A ^f(B<U> ^u) = 0;
};
//C4570 明示的に抽象として宣言せずに抽象関数を含んでいます
generic<typename T> ref struct B : A {
//C4490 オーバーライド指定子が不適切
generic<typename U> virtual A ^f(B<U> ^u) override {
return u;
}
};
同じ戻り値と引数でも、同じ関数だと認識されないようなのですが、どのようにすれば良いですか?
generic<typename T> ref struct B;
ref struct A abstract {
generic<typename U> virtual A ^f(B<U> ^u) = 0;
};
//C4570 明示的に抽象として宣言せずに抽象関数を含んでいます
generic<typename T> ref struct B : A {
//C4490 オーバーライド指定子が不適切
generic<typename U> virtual A ^f(B<U> ^u) override {
return u;
}
};
同じ戻り値と引数でも、同じ関数だと認識されないようなのですが、どのようにすれば良いですか?
830デフォルトの名無しさん
2014/05/13(火) 10:02:57.61ID:Kixx6i0Q ttp://social.msdn.microsoft.com/forums/vstudio/ja-JP/2f138907-64a3-4326-bfea-d0e4b3c15fa8
仕様っぽいのであきらめてC++/CLI投げ捨ててC#で書く
仕様っぽいのであきらめてC++/CLI投げ捨ててC#で書く
831デフォルトの名無しさん
2014/05/13(火) 10:44:57.11ID:QKhoqLLT なるほど・・・ありがとうございました。
832デフォルトの名無しさん
2014/05/13(火) 23:30:42.34ID:OiuzuWyN C#でdelegateに設定されたメソッドを調べるのにGetInvocationListを参照していたのですが、
C++/CLIで同じようなことをするとコンパイルエラーが発生してしまいます。
どのようにコーディングすればよいでしょうか?
// C#
http://ideone.com/O4j7TX
// C++/CLI
http://ideone.com/Lazyxs
※実際は23行目のauto mcd = (MulticastDelegate^)hoge->Piyo;で
error C3918: 使用するには、'Delegate::Hoge::Piyo' がデータ メンバーでなければなりません
といったエラーが発生してしまいます。
C++/CLIで同じようなことをするとコンパイルエラーが発生してしまいます。
どのようにコーディングすればよいでしょうか?
// C#
http://ideone.com/O4j7TX
// C++/CLI
http://ideone.com/Lazyxs
※実際は23行目のauto mcd = (MulticastDelegate^)hoge->Piyo;で
error C3918: 使用するには、'Delegate::Hoge::Piyo' がデータ メンバーでなければなりません
といったエラーが発生してしまいます。
833デフォルトの名無しさん
2014/05/13(火) 23:41:08.55ID:RH21G1qI C++/CLIの方はeventじゃん
834デフォルトの名無しさん
2014/05/13(火) 23:47:44.50ID:OiuzuWyN835デフォルトの名無しさん
2014/05/14(水) 08:39:30.20ID:ICklhj5Y event自体は正当で使う側が問題なのに、eventの方でコンパイルエラー言われても
836デフォルトの名無しさん
2014/05/14(水) 11:14:20.64ID:k1JIQlQE ワロタ
837デフォルトの名無しさん
2014/05/14(水) 23:09:07.27ID:OfRhuTl1 すいません>>832です。
禿しく勘違いしてました。C#のeventはシンタックスシュガーなんですね。
event EventHandler^ Piyo
{
void add(EventHandler^ value) { mPiyo += value; }
void remove(EventHandler^ value) { mPiyo -= value; }
void raise(Object^ sender, EventArgs^ e) { mPiyo(sender, e); }
}
EventHandler^ mPiyo;
などとしたら上手くいきました。
禿しく勘違いしてました。C#のeventはシンタックスシュガーなんですね。
event EventHandler^ Piyo
{
void add(EventHandler^ value) { mPiyo += value; }
void remove(EventHandler^ value) { mPiyo -= value; }
void raise(Object^ sender, EventArgs^ e) { mPiyo(sender, e); }
}
EventHandler^ mPiyo;
などとしたら上手くいきました。
838デフォルトの名無しさん
2014/05/26(月) 03:20:04.74ID:l0k3Jdk0 c++/cli初めて作成しています。
c++プロジェクトでライブラリを作成して
void func1(const char *p){
cout << p << endl;
}
を定義して、
c++/cliプロジェクトでこの関数を呼び出すと、
func1("Hello World"); //呼び出し成功
func1("Hello" + "World"); //型 "System::String ^" の引数は型 "const char *" のパラメーターと互換性がありません
となったので、エラー解決のために少しググって、よくわからないまま
char* pStr = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi("Hello" + "World").ToPointer();
のようにして、
func1(pStr); //呼び出し成功
しました。
この場合、
func1("Hello" + "World");
を実行可能に出来るようにc++ライブラリ側で、この引数を受けられるfunc1関数を定義することは可能でしょうか?
c++プロジェクトでライブラリを作成して
void func1(const char *p){
cout << p << endl;
}
を定義して、
c++/cliプロジェクトでこの関数を呼び出すと、
func1("Hello World"); //呼び出し成功
func1("Hello" + "World"); //型 "System::String ^" の引数は型 "const char *" のパラメーターと互換性がありません
となったので、エラー解決のために少しググって、よくわからないまま
char* pStr = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi("Hello" + "World").ToPointer();
のようにして、
func1(pStr); //呼び出し成功
しました。
この場合、
func1("Hello" + "World");
を実行可能に出来るようにc++ライブラリ側で、この引数を受けられるfunc1関数を定義することは可能でしょうか?
839デフォルトの名無しさん
2014/05/26(月) 05:33:40.37ID:TbdBw+Sj 無理
840デフォルトの名無しさん
2014/05/26(月) 09:14:28.60ID:l0k3Jdk0841デフォルトの名無しさん
2014/05/26(月) 09:35:16.69ID:QBzBPwJ7 System::String^はネイティブでは直接扱えないから
842デフォルトの名無しさん
2014/05/26(月) 09:42:14.96ID:l0k3Jdk0 >>841
なるほど。ありがとうございました。
なるほど。ありがとうございました。
843デフォルトの名無しさん
2014/06/16(月) 00:28:31.77ID:KzXlrctf c#で書かれたdllを呼び出すc++/cliのラッパー
static libを作り、それを呼び出すc++のコードを
書けば、c++でc#のdllを呼び出す事が出来ますか?
static libを作り、それを呼び出すc++のコードを
書けば、c++でc#のdllを呼び出す事が出来ますか?
844デフォルトの名無しさん
2014/06/16(月) 03:18:12.95ID:TImdW3D8 出来るよ。リンク時に/MDオプションを使う必要はあったと思うけど。
845デフォルトの名無しさん
2014/06/16(月) 11:06:40.38ID:KzXlrctf846デフォルトの名無しさん
2014/06/20(金) 23:37:50.80ID:oekTSRl4 std::regexで"["や"]"などの文字を扱うにはどう書けばいいですか?
たとえばテキスト中に"[43]"などの[]で囲まれた数字があるかどうか知りたいのですが。
たとえばテキスト中に"[43]"などの[]で囲まれた数字があるかどうか知りたいのですが。
847765
2014/06/21(土) 16:55:19.23ID:BNLCZco1 久しぶりにVS開いたらWinFormが消えとる。もう捨てられるのか
>>845
これか
http://code.msdn.microsoft.com/windowsdesktop/CppHostCLR-e6581ee0
>>846
\でエスケープします
regex r("\[43\]");
>>845
これか
http://code.msdn.microsoft.com/windowsdesktop/CppHostCLR-e6581ee0
>>846
\でエスケープします
regex r("\[43\]");
848デフォルトの名無しさん
2014/06/21(土) 16:56:33.36ID:BNLCZco1 regex r("\\[43\\]");
こうか
こうか
849デフォルトの名無しさん
2014/06/25(水) 18:40:03.79ID:a/L3Ky6p こんどCLI+API+STLで久々に開発するぜ
まともにWindowsアプリ作るの15年ぶりだぜ
まともにWindowsアプリ作るの15年ぶりだぜ
850デフォルトの名無しさん
2014/06/25(水) 18:40:43.32ID:jtRedncf ご愁傷様
851デフォルトの名無しさん
2014/06/25(水) 19:43:48.20ID:a/L3Ky6p なんでご愁傷様?
852デフォルトの名無しさん
2014/06/29(日) 15:12:56.12ID:74KQZ/Pg WebBrowser::ActiveXInstanceのようなCOMポインターをObject^で返したいんですが
どう書いたらいいんでしょうか
Object^ get()
{
IUnknown* pU; //これを返したい
...
}
C#だと全部属性でやってて生ポインタをどう処理するかの参考にならないです。
どう書いたらいいんでしょうか
Object^ get()
{
IUnknown* pU; //これを返したい
...
}
C#だと全部属性でやってて生ポインタをどう処理するかの参考にならないです。
853デフォルトの名無しさん
2014/06/30(月) 07:13:06.08ID:AE59suyp それを返した先でどうするのさ
例えばIntPtrを返しても一応Object^にはなるけど多分そういう事じゃないよね?
例えばIntPtrを返しても一応Object^にはなるけど多分そういう事じゃないよね?
854デフォルトの名無しさん
2014/06/30(月) 08:29:40.70ID:k6aB52Mb Object^o=Marshal::GetTypedObjectForIUnknown(IntPtr(pU),Object::typeid);
とりあえずこうしました
addref,releaseが同じにならないといやだけど
とりあえずこうしました
addref,releaseが同じにならないといやだけど
855デフォルトの名無しさん
2014/07/30(水) 21:04:47.45ID:4VkY0HvI C++/CLI超楽しい
.Net、WinAPI、STL、Boost混在できて使いたい放題だし
何でみんな毛嫌いするの?
.Net、WinAPI、STL、Boost混在できて使いたい放題だし
何でみんな毛嫌いするの?
856デフォルトの名無しさん
2014/07/30(水) 22:46:45.65ID:310IZqCv C++とは似て異なるから
857デフォルトの名無しさん
2014/07/30(水) 23:48:31.72ID:QJA3s1XV 最初から別言語だと思っとけばいいじゃん。
俺もC++/CLIは面白いと思うが、先がなさそうなのが残念だな。
WPFが使えるようになったらMFCのアプリを移行したいと思っていたんだが。
俺もC++/CLIは面白いと思うが、先がなさそうなのが残念だな。
WPFが使えるようになったらMFCのアプリを移行したいと思っていたんだが。
858デフォルトの名無しさん
2014/07/31(木) 13:36:46.98ID:N7h43RT+ やりたい放題というのは1人でやってるだけなら楽しいが
足を引っ張る仲間がいると地獄巡り満腹コースになる
足を引っ張る仲間がいると地獄巡り満腹コースになる
859デフォルトの名無しさん
2014/07/31(木) 20:54:03.92ID:Ng6XWAlf マネージ関数の中でlambda使えないとか、最近は混ざる利点みたいなものが少なく…。
860デフォルトの名無しさん
2014/08/05(火) 16:06:10.29ID:8/O3Z/TB genericとtemplate混ぜたら楽しいと思ってたけど、
あんまり混ざらないようにできてる・・
あんまり混ざらないようにできてる・・
861デフォルトの名無しさん
2014/08/05(火) 21:42:31.92ID:a3vuC94X variadic template使って型パラメータの数が違うgeneric classを使えるかと思ったら、なんかエラーになるしね。
862デフォルトの名無しさん
2014/08/06(水) 12:55:33.48ID:YJYkBYpf genericクラスの中にtemplateは作れないし
その逆もできない。
できるのは、genericクラスをtemplateで
継承するくらい。
>>861 variadic genericあったらいいなぁ
その逆もできない。
できるのは、genericクラスをtemplateで
継承するくらい。
>>861 variadic genericあったらいいなぁ
863デフォルトの名無しさん
2014/09/26(金) 00:00:55.65ID:Q/qK3xNe C++/CLIに直接関わる質問ではないのですが
適切なスレが見当たらなかったのでここで質問させてください。
ネイティブのnative.dllをマネージのmanage.dllが参照しているとき
native.dllにパスが通っていない状態でmanage.dllを使用すると
FileNotFoundExceptionが発生してしまいますが、
その例外の値からはnative.dllが見つからないことが原因であることを
判断することができません。
そこでmanage.dllが参照しているdllの一覧のようなものを取得したいのですが
そのようなAPIは用意されていますでしょうか?
とりあえずdumpbin.exe /dependentsで出力される結果を用いる実装にしてみたのですが
やはり外部の実行ファイルに頼るのは微妙ですし、何より処理が重いです。
Win32APIでも構いませんので何か方法がありましたらご教示ください。
適切なスレが見当たらなかったのでここで質問させてください。
ネイティブのnative.dllをマネージのmanage.dllが参照しているとき
native.dllにパスが通っていない状態でmanage.dllを使用すると
FileNotFoundExceptionが発生してしまいますが、
その例外の値からはnative.dllが見つからないことが原因であることを
判断することができません。
そこでmanage.dllが参照しているdllの一覧のようなものを取得したいのですが
そのようなAPIは用意されていますでしょうか?
とりあえずdumpbin.exe /dependentsで出力される結果を用いる実装にしてみたのですが
やはり外部の実行ファイルに頼るのは微妙ですし、何より処理が重いです。
Win32APIでも構いませんので何か方法がありましたらご教示ください。
864デフォルトの名無しさん
2014/09/26(金) 08:53:54.22ID:CyXmGE6J 開発フェーズなら
Dependency Walkerというツールがある
Dependency Walkerというツールがある
865デフォルトの名無しさん
2014/09/26(金) 08:56:02.56ID:CyXmGE6J あっ、実行時の話やったか
866デフォルトの名無しさん
2014/09/26(金) 11:29:52.72ID:b/KTTsk9 FileNotFoundが発生したら
LoadLibrary("native.dll");
GetLastError()してみるってのはどうだろう?
LoadLibrary("native.dll");
GetLastError()してみるってのはどうだろう?
867デフォルトの名無しさん
2014/10/08(水) 22:50:24.63ID:T8t7hCtu >>863です。亀ですいませんが解決しました。
APIとしてはImageHelpライブラリ辺りが使えそうだったのですが途中で詰まったので断念。
結局ファイルを直接読んでIMAGE_DOS_HEADER構造体からたどって
インポートデータを解析することで対応できました。
APIとしてはImageHelpライブラリ辺りが使えそうだったのですが途中で詰まったので断念。
結局ファイルを直接読んでIMAGE_DOS_HEADER構造体からたどって
インポートデータを解析することで対応できました。
868デフォルトの名無しさん
2014/10/16(木) 17:29:15.53ID:sLOsTk32 質問です。
MyCapsuleというクラスを作り、GetValue(参照渡しの引数)という仮想関数を
定義しておいて、このクラスから派生したクラスにおいてGetValueの実装を
するにあたり、与えられた引数がある特定の型に合致する場合にはその
引数に値を代入する、という動作を実現したいです。
例えばMyCapsuleIntという派生クラスでは、与えられた引数がint型だった
場合に、その引数に(何かしらメンバ変数などの)値を代入する、というもの
です。
こういう場合アンマネージドだと引数としてvoid*を使った実装になるかと
思うんですが、マネージドだとかわりにObject^%とかを使うのでしょうか?
ハンドルと追跡参照について未だによくわかっていないので、どうするのが
一般的な作法なのか見当がつきません。
よろしくお願いします。
MyCapsuleというクラスを作り、GetValue(参照渡しの引数)という仮想関数を
定義しておいて、このクラスから派生したクラスにおいてGetValueの実装を
するにあたり、与えられた引数がある特定の型に合致する場合にはその
引数に値を代入する、という動作を実現したいです。
例えばMyCapsuleIntという派生クラスでは、与えられた引数がint型だった
場合に、その引数に(何かしらメンバ変数などの)値を代入する、というもの
です。
こういう場合アンマネージドだと引数としてvoid*を使った実装になるかと
思うんですが、マネージドだとかわりにObject^%とかを使うのでしょうか?
ハンドルと追跡参照について未だによくわかっていないので、どうするのが
一般的な作法なのか見当がつきません。
よろしくお願いします。
869デフォルトの名無しさん
2014/10/16(木) 21:50:11.68ID:rtOJWyFH アンマネージからマネージの関数を呼んで
マネージドの中で作ったString^からchar*でアンマネージドに戻したいんです。
調べたところ
(char*)Marshal::StringToHGlobalAnsi("").ToPointer()ってのがあるのはわかったのです。
けど、これで戻してもアンマネージドからMarshal::FreeHGlobalが呼べないのでだめです。
一度StringToHGlobalAnsiで得たchar*を別のcharのバッファにコピーしてから戻す方法になるのでしょうか。
マネージドの中で作ったString^からchar*でアンマネージドに戻したいんです。
調べたところ
(char*)Marshal::StringToHGlobalAnsi("").ToPointer()ってのがあるのはわかったのです。
けど、これで戻してもアンマネージドからMarshal::FreeHGlobalが呼べないのでだめです。
一度StringToHGlobalAnsiで得たchar*を別のcharのバッファにコピーしてから戻す方法になるのでしょうか。
870デフォルトの名無しさん
2014/10/16(木) 22:01:55.82ID:rvFRd6iT Marshal::StringToHGlobal...で確保したのはLocalFreeすればいいけど
普通は呼び出し元がバッファ用意するなり、std::stringとかで返すなりするもんじゃね?
普通は呼び出し元がバッファ用意するなり、std::stringとかで返すなりするもんじゃね?
871デフォルトの名無しさん
2014/10/16(木) 22:15:47.60ID:rtOJWyFH なるほどLocalFreeで解放できるんですね。
>普通は呼び出し元がバッファ用意するなり
固定長になるからどうしようかなとおもって。
>std::string
StringToHGlobalAnsiで領域を確保したのに
stringでまた確保されるのがあれかなとか。
気にしすぎといわれればそうです・・・。
>普通は呼び出し元がバッファ用意するなり
固定長になるからどうしようかなとおもって。
>std::string
StringToHGlobalAnsiで領域を確保したのに
stringでまた確保されるのがあれかなとか。
気にしすぎといわれればそうです・・・。
872デフォルトの名無しさん
2014/10/22(水) 13:38:11.49ID:5iN2ViqP C#みたいにCodeProviderで動的な文字列をコンパイルして
実行したいんですが、もしかしたらC++/CLIにはCodeProviderが
ないですか?
実行したいんですが、もしかしたらC++/CLIにはCodeProviderが
ないですか?
873デフォルトの名無しさん
2014/10/22(水) 13:43:12.37ID:5iN2ViqP すいません、抜けてました。
CodeDomProviderを継承したCodeProviderです
CodeDomProviderを継承したCodeProviderです
874デフォルトの名無しさん
2014/10/22(水) 17:09:24.88ID:LQAHBIBx まあ混合型使えないからそれならC#でいいじゃんってことになるよね
875デフォルトの名無しさん
2014/11/11(火) 14:49:35.49ID:TsA8Knwq C++のDLLをC#で使いたいのですがC++/CLIで吸収したほうがいいのかな?
C++の構造体のポインタとかあってわけわからん
C++の構造体のポインタとかあってわけわからん
876デフォルトの名無しさん
2014/11/11(火) 16:50:02.76ID:9mz6Ds+P 構造体 マーシャリング でぐぐる
877デフォルトの名無しさん
2014/11/12(水) 00:51:06.13ID:pdAxKpZn >>875の件ですがC#でなんとかがんばることにしました
お騒がせしました
お騒がせしました
878デフォルトの名無しさん
2014/12/09(火) 00:10:16.60ID:xpR1dfQS C++/cli からC++のプロジェクトに定義している関数を呼び出したいんです。
C++プロジェクトのlibファイルを参照し、includeファイルをC++/cli側に
持ってきて#include すると、物凄い数のエラーがでます。
(C2011:C2079:C2504:C3395:C3699)
[1] C++/cliで参照できるよう、ビルドエラーを直すしかない
[2] 別の方法でC++の関数をビルドエラー無しに参照できる。
ちなみに、C++の関数を参照しないで自作・・・という回答は無しでお願いします。
C++プロジェクトのlibファイルを参照し、includeファイルをC++/cli側に
持ってきて#include すると、物凄い数のエラーがでます。
(C2011:C2079:C2504:C3395:C3699)
[1] C++/cliで参照できるよう、ビルドエラーを直すしかない
[2] 別の方法でC++の関数をビルドエラー無しに参照できる。
ちなみに、C++の関数を参照しないで自作・・・という回答は無しでお願いします。
879デフォルトの名無しさん
2014/12/09(火) 10:30:47.48ID:sSNN3cut 物凄い数のエラーじゃなくてエラーの内容をチェックしろよ。
出力ログのエラーの行をダブルクリックすると問題の箇所に飛ぶから
何で再定義だとか定義がないと言われてるか考えろ。
何でその程度のレベルでC++/CLIとかやってんの。
出力ログのエラーの行をダブルクリックすると問題の箇所に飛ぶから
何で再定義だとか定義がないと言われてるか考えろ。
何でその程度のレベルでC++/CLIとかやってんの。
880デフォルトの名無しさん
2014/12/09(火) 10:30:56.11ID:Xzj5HeMN 1.C++から呼び出す
2.C#に移植する
C++/CLIでなきゃいけない理由なんてあるん?
2.C#に移植する
C++/CLIでなきゃいけない理由なんてあるん?
881878
2014/12/09(火) 22:59:58.60ID:ygQnozb4 すみません、初心者なりにエラーの原因を調べてきました。
a.h
class A : public B {}
b.h
class B {}
この時に Class B で再定義のエラーが発生していました。
a.h が先にincludeされているのが問題で、b.h を先にinclude するよう
ソース修正すれば良い・・・・・ということでしょうか??
a.h
class A : public B {}
b.h
class B {}
この時に Class B で再定義のエラーが発生していました。
a.h が先にincludeされているのが問題で、b.h を先にinclude するよう
ソース修正すれば良い・・・・・ということでしょうか??
882デフォルトの名無しさん
2014/12/11(木) 12:05:51.55ID:WAwY/dPu 各ヘッダの先頭に#pragma onceと書く
a.hでb.hのクラスを使っているなら
a.h内でb.hをinludeしろ
cpp側でincludeの順を気にしなきゃならないのは糞
a.hでb.hのクラスを使っているなら
a.h内でb.hをinludeしろ
cpp側でincludeの順を気にしなきゃならないのは糞
883デフォルトの名無しさん
2014/12/15(月) 20:00:30.77ID:JoQajMNA 質問です。
任意の型のマネージド配列(cli::array)を、任意の個数、引数として受け取って
それらの配列としての長さの最小値を返す関数を書きたいと思っています。
イメージとしては、
array<String^> arrStr = gcnew array<String^>(6);
array<double> arrDob = gcnew array<double>(8);
array<int> arrInt = gcnew array<int>(3);
に対して、
Function(arrStr, arrDob) = 6
Function(arrStr, arrDob, arrInt) = 3
となるような関数Functionを書きたいと思っています。
しかし、この場合の引数リストの書き方がよくわかりません。
単純に可変長の引数リストだとFunction(... array<Object^>^ args)みたいな
書き方になると思うんですが、これをマネージド配列の配列だからといって
真似てFunction(... array<array<Object^>^>^ arrays)みたいな書き方をしても、
呼び出し側(例えばFunction(arrStr, arrDob)とか)で引数リストが一致しない旨
怒られます。このような場合の適切な引数リストの書き方ってありますか?
あるいは回避策として、引数はFunction(... array<Object^>^ args)としておき
この関数の中でfor each (Object^ arg in args) { argが配列かどうか }という
コードもありえますが、肝心の、「argが配列かどうか」チェックするコードが
わかりません。
上記いずれか一方で構いませんので、解決策をご教授いただけないでしょうか?
任意の型のマネージド配列(cli::array)を、任意の個数、引数として受け取って
それらの配列としての長さの最小値を返す関数を書きたいと思っています。
イメージとしては、
array<String^> arrStr = gcnew array<String^>(6);
array<double> arrDob = gcnew array<double>(8);
array<int> arrInt = gcnew array<int>(3);
に対して、
Function(arrStr, arrDob) = 6
Function(arrStr, arrDob, arrInt) = 3
となるような関数Functionを書きたいと思っています。
しかし、この場合の引数リストの書き方がよくわかりません。
単純に可変長の引数リストだとFunction(... array<Object^>^ args)みたいな
書き方になると思うんですが、これをマネージド配列の配列だからといって
真似てFunction(... array<array<Object^>^>^ arrays)みたいな書き方をしても、
呼び出し側(例えばFunction(arrStr, arrDob)とか)で引数リストが一致しない旨
怒られます。このような場合の適切な引数リストの書き方ってありますか?
あるいは回避策として、引数はFunction(... array<Object^>^ args)としておき
この関数の中でfor each (Object^ arg in args) { argが配列かどうか }という
コードもありえますが、肝心の、「argが配列かどうか」チェックするコードが
わかりません。
上記いずれか一方で構いませんので、解決策をご教授いただけないでしょうか?
884デフォルトの名無しさん
2014/12/15(月) 20:51:05.44ID:oSpn/+/y ... System::Array^ args
arg->GetLength
... System::Collections::IList^ args
arg->Count
arg->GetLength
... System::Collections::IList^ args
arg->Count
885デフォルトの名無しさん
2014/12/15(月) 22:28:59.04ID:JoQajMNA >>884
試してみましたが、いずれの場合もコンパイルエラーC3132が発生します。
そもそもargの型を何に指定すべきなのか、というのがよくわかっていません。
例えば
int Function(... array<Object^>^ args)
{
int MinLength = -1;
for each(array<Object^>^ arg in args)
{
if ( (MinLength < 0) || (arg->Length < MinLength) )
{
MinLength = arg->Length;
}
}
return MinLength;
}
みたいなコードだと、Function(arrStr, arrInt)を実行したとき、それら引数を
System.Object[]にキャストできない旨を怒られます。
試してみましたが、いずれの場合もコンパイルエラーC3132が発生します。
そもそもargの型を何に指定すべきなのか、というのがよくわかっていません。
例えば
int Function(... array<Object^>^ args)
{
int MinLength = -1;
for each(array<Object^>^ arg in args)
{
if ( (MinLength < 0) || (arg->Length < MinLength) )
{
MinLength = arg->Length;
}
}
return MinLength;
}
みたいなコードだと、Function(arrStr, arrInt)を実行したとき、それら引数を
System.Object[]にキャストできない旨を怒られます。
886デフォルトの名無しさん
2014/12/15(月) 22:43:22.71ID:oSpn/+/y ごめんちょっとぼけてた
... array<System::Array^>^ args
for each (auto arg in args) { int len = arg->GetLength(0);
... array<System::Collections::IList^>^ args
for each (auto arg in args) { int len = arg->Count;
... array<System::Array^>^ args
for each (auto arg in args) { int len = arg->GetLength(0);
... array<System::Collections::IList^>^ args
for each (auto arg in args) { int len = arg->Count;
887デフォルトの名無しさん
2014/12/15(月) 22:49:54.98ID:JoQajMNA >>886
うまくいきました!
動作版のコードは以下の通りです。
int Function(... array<System::Array^>^ args)
{
int MinLength = -1;
for each(auto arg in args)
{
if ( (MinLength < 0) || (arg->Length < MinLength) )
{
MinLength = arg->Length;
}
}
return MinLength;
}
ありがとうございました。
うまくいきました!
動作版のコードは以下の通りです。
int Function(... array<System::Array^>^ args)
{
int MinLength = -1;
for each(auto arg in args)
{
if ( (MinLength < 0) || (arg->Length < MinLength) )
{
MinLength = arg->Length;
}
}
return MinLength;
}
ありがとうございました。
888デフォルトの名無しさん
2015/01/28(水) 22:20:24.42ID:NY0MHdg2 String^ selectedEmployee = (String^)(ComboBox1->SelectedItem);
^ってどういう意味?
^ってどういう意味?
889デフォルトの名無しさん
2015/01/28(水) 22:43:41.32ID:CFOgWxxn トラッキングハンドルって意味
890デフォルトの名無しさん
2015/01/30(金) 16:37:12.12ID:w20faKmH こらこら。
普通のC++でいうところの*だよ。
普通のC++でいうところの*だよ。
891デフォルトの名無しさん
2015/02/06(金) 15:15:17.14ID:n2QXEqei >>888
参照型
参照型
892デフォルトの名無しさん
2015/03/01(日) 13:44:47.71ID:M4V41Yry 既存の native C++ のプログラムからC#で作ったdllを呼び出す必要が出てきたんで
/clrを使おうと思うんだが、.NETを使う部分以外のソースを全部 #pragma unmanaged
しておけば既存のnativeのプログラムと変わらないと考えていいのかな?
スタートアップに時間がかかったりするかもしれないけど。
それ以外になにか、純粋なnativeアプリと比べてのデメリットとかあるだろうか?
/clrを使おうと思うんだが、.NETを使う部分以外のソースを全部 #pragma unmanaged
しておけば既存のnativeのプログラムと変わらないと考えていいのかな?
スタートアップに時間がかかったりするかもしれないけど。
それ以外になにか、純粋なnativeアプリと比べてのデメリットとかあるだろうか?
893デフォルトの名無しさん
2015/03/03(火) 10:49:44.41ID:2xjYWNh7 拡張する度にpragma追加するのが面倒くさいからCOM exportのがいいよ
894デフォルトの名無しさん
2015/03/03(火) 22:20:54.28ID:QODsipDB COMはregistryやGACに登録しないとならないのが。それがなければ使いたいんだけど。
pragamはまぁ、stdafx.hに仕込んどけばいいだけなんで。
で、試してみて一応ビルドは通って、DependencyWalkerで見てもほとんど同じに見えたけど、
起動時に例外が出てうまく立ち上がらなかった。
どちらにしても、ビルドに時間がかかるんで普通にwrapperだけC++/CLIで作った方が楽そう。
pragamはまぁ、stdafx.hに仕込んどけばいいだけなんで。
で、試してみて一応ビルドは通って、DependencyWalkerで見てもほとんど同じに見えたけど、
起動時に例外が出てうまく立ち上がらなかった。
どちらにしても、ビルドに時間がかかるんで普通にwrapperだけC++/CLIで作った方が楽そう。
895デフォルトの名無しさん
2015/03/03(火) 23:37:18.31ID:TZKBUrl9 Register freeのcomが良い
896デフォルトの名無しさん
2015/03/04(水) 00:00:58.99ID:1PNNe6DT ほー、Interopでも登録なしで使えたのか。知らんかった。
897デフォルトの名無しさん
2015/04/11(土) 23:36:34.69ID:rfVEU9W7 http://peace.2ch.net/test/read.cgi/tech/1420379468/279
から誘導されてきました。
質問です。
実行時にフォームをイベントごとコピーしたいのですが、
元のイベント関数のハンドラが取れず、上手く行きません。
解決策があれば教えてください。
やりたいこと:
チェックボックス等のフォームをデザイナで指定し、イベント関数もデザイナで指定します。
プログラムでこのチェックボックス等を10個ほどにコピーし、並べます。
このときにプロパティ等はコピーできますが、イベント関数がコピーできません。
理由:
位置決めが楽なので、デザイナ側で頭のFormは指定したいのです。
そして管理上分かりやすいので、イベントもそこに書いて、これをコピーしようとしています。
ところがEventInfo::GetRaiseMethodではnullが返ってきてしまいます。
ハンドラさえ取れれば以下と組み合わせて上手く行くと思うのですが。
https://msdn.microsoft.com/ja-jp/library/ms228976%28v=vs.110%29.aspx
状況:
なおC#だと以下で上手く行きます。
http://stackoverflow.com/questions/6055038/how-to-clone-control-event-handlers-at-run-time
ただしC++だと、GetField("events")がnullptrを返してくるので駄目です。
キーワードは色々試してみましたが、当たりませんでした。
前から困っている点で、とらいえずいちいち書いて対応していますが、
見ていて汚いので書き直したいと思っています。
気長に待っていますので、どなたか対策をご存じの方はレスよろしくお願いします。
から誘導されてきました。
質問です。
実行時にフォームをイベントごとコピーしたいのですが、
元のイベント関数のハンドラが取れず、上手く行きません。
解決策があれば教えてください。
やりたいこと:
チェックボックス等のフォームをデザイナで指定し、イベント関数もデザイナで指定します。
プログラムでこのチェックボックス等を10個ほどにコピーし、並べます。
このときにプロパティ等はコピーできますが、イベント関数がコピーできません。
理由:
位置決めが楽なので、デザイナ側で頭のFormは指定したいのです。
そして管理上分かりやすいので、イベントもそこに書いて、これをコピーしようとしています。
ところがEventInfo::GetRaiseMethodではnullが返ってきてしまいます。
ハンドラさえ取れれば以下と組み合わせて上手く行くと思うのですが。
https://msdn.microsoft.com/ja-jp/library/ms228976%28v=vs.110%29.aspx
状況:
なおC#だと以下で上手く行きます。
http://stackoverflow.com/questions/6055038/how-to-clone-control-event-handlers-at-run-time
ただしC++だと、GetField("events")がnullptrを返してくるので駄目です。
キーワードは色々試してみましたが、当たりませんでした。
前から困っている点で、とらいえずいちいち書いて対応していますが、
見ていて汚いので書き直したいと思っています。
気長に待っていますので、どなたか対策をご存じの方はレスよろしくお願いします。
898デフォルトの名無しさん
2015/04/12(日) 03:07:38.87ID:UeaTPkyU auto f = (Component::typeid)->GetField("events", BindingFlags::NonPublic | BindingFlags::Instance);
auto v = f->GetValue(checkBox1);
f->SetValue(checkBox2, v);
でふるまいが同一になるけど。
auto v = f->GetValue(checkBox1);
f->SetValue(checkBox2, v);
でふるまいが同一になるけど。
899デフォルトの名無しさん
2015/04/12(日) 03:39:58.42ID:DBf5x0AF >>898
お早い回答ありがとうございます。
こちらで確認した結果、確かに動きました。
(Component::typeid) のところを私は Component::GetType() にしていたのが敗因のようです。
見よう見まねでやっているため、実はここら辺のところがいまいち分かっていません。
お手数をおかけ致しました。また、ありがとうございました。
お早い回答ありがとうございます。
こちらで確認した結果、確かに動きました。
(Component::typeid) のところを私は Component::GetType() にしていたのが敗因のようです。
見よう見まねでやっているため、実はここら辺のところがいまいち分かっていません。
お手数をおかけ致しました。また、ありがとうございました。
900デフォルトの名無しさん
2015/04/12(日) 03:49:39.70ID:UeaTPkyU Component::GetType() は Form の中でなら GetType() と同じ。
C++で親クラスのメソッド呼ぶときの文法よ。
C++で親クラスのメソッド呼ぶときの文法よ。
901デフォルトの名無しさん
2015/04/12(日) 10:00:53.76ID:DBf5x0AF902897
2015/04/15(水) 19:57:16.10ID:F8+sQhgK >>898
これ、少なくとも numericUpDown の ValueChanged イベントはコピーできないことが分かりました。
その他は不明です。
元々このやり方はどのドキュメントにも書いていないらしいので、文句は言えないのですが、
どなたか解決策をご存じであれば教えてください。
なお、Button の Click イベントについては、また別の解を見つけました。
似たようなものですが、keyが必要なようです。
http://stackoverflow.com/questions/293007/is-it-possible-to-steal-an-event-handler-from-one-control-and-give-it-to-anoth
ただ、Button Click 自体はこちらで試す限り、 >>898 でコピーできています。
これ、少なくとも numericUpDown の ValueChanged イベントはコピーできないことが分かりました。
その他は不明です。
元々このやり方はどのドキュメントにも書いていないらしいので、文句は言えないのですが、
どなたか解決策をご存じであれば教えてください。
なお、Button の Click イベントについては、また別の解を見つけました。
似たようなものですが、keyが必要なようです。
http://stackoverflow.com/questions/293007/is-it-possible-to-steal-an-event-handler-from-one-control-and-give-it-to-anoth
ただ、Button Click 自体はこちらで試す限り、 >>898 でコピーできています。
903デフォルトの名無しさん
2015/04/29(水) 20:01:07.13ID:3xtog1sc マネージクラスのポインタを取得(pin_ptr)し、ネイティブクラスのポインタにキャストする方法を探しています。
class NativeClass
{
int Hoge;
};
[StructLayout(LayoutKind::Sequential)]
public ref class ManagedClass
{
private:
int mHoge;
public:
property Int32 Hoge { Int32 get() { return this->mHoge; } }
};
mHogeがinternalの場合は下記でできますが、privateの場合はどう書けば良いのでしょうか?
ManagedClass^ managedClass = gcnew ManagedClass();
pin_ptr<int> pManagedClass = &managedClass->mHoge;
NativeClass* pNativeClass = (NativeClass*)pManagedClass;
class NativeClass
{
int Hoge;
};
[StructLayout(LayoutKind::Sequential)]
public ref class ManagedClass
{
private:
int mHoge;
public:
property Int32 Hoge { Int32 get() { return this->mHoge; } }
};
mHogeがinternalの場合は下記でできますが、privateの場合はどう書けば良いのでしょうか?
ManagedClass^ managedClass = gcnew ManagedClass();
pin_ptr<int> pManagedClass = &managedClass->mHoge;
NativeClass* pNativeClass = (NativeClass*)pManagedClass;
904デフォルトの名無しさん
2015/04/29(水) 23:24:10.23ID:wtD4uRPe property const Int32% Hoge { const Int32% get() { return this->mHoge; } }
にすれば、&managedClass->Hoge が interior_ptr<const int> になるから後は適当にキャストすればいいんでは。
にすれば、&managedClass->Hoge が interior_ptr<const int> になるから後は適当にキャストすればいいんでは。
905デフォルトの名無しさん
2015/04/30(木) 23:38:42.52ID:EZeUEJ9k >>904
返信ありがとうございます。
トラッキング参照のプロパティはC#側で扱えなくなってしまうので避けたいです。
フィールドを参照しないと無理みたいなので、mHogeを公開するようにしようと思います。
ありがとうございました。
返信ありがとうございます。
トラッキング参照のプロパティはC#側で扱えなくなってしまうので避けたいです。
フィールドを参照しないと無理みたいなので、mHogeを公開するようにしようと思います。
ありがとうございました。
906デフォルトの名無しさん
2015/05/01(金) 20:25:15.13ID:1uBqK3bl 知ってるかもだけど、ManagedClass が value class, value struct なら
pin_ptr<ManagedClass> を reinterpret_cast<NativeClass *> するのは安全だったはず…
pin_ptr<ManagedClass> を reinterpret_cast<NativeClass *> するのは安全だったはず…
907デフォルトの名無しさん
2015/05/08(金) 23:36:54.66ID:V8hi9yRP MessageBoxを親の中央に表示する簡単な方法はないですか?
自分でフォームを作ってしまえばいいんでしょうか?
最近までVC++6.0でMFCしか触ったことない自宅へぼプログラマです
自分でフォームを作ってしまえばいいんでしょうか?
最近までVC++6.0でMFCしか触ったことない自宅へぼプログラマです
908デフォルトの名無しさん
2015/05/09(土) 21:01:16.72ID:sbTRo4x2 フックでメッセージボックスのハンドルを取得して移動するだけ
909デフォルトの名無しさん
2015/05/19(火) 18:58:05.23ID:bujHJjw6 .NET Framework 4 で C++/CLI 混在モード アセンブリを使用すると、スレッドの生成・終了時にメモリ リークが生じる問題について
http://blogs.msdn.com/b/jpvsblog/archive/2015/05/18/mixedassembly-thread-leak.aspx
http://blogs.msdn.com/b/jpvsblog/archive/2015/05/18/mixedassembly-thread-leak.aspx
910デフォルトの名無しさん
2015/05/20(水) 10:30:15.88ID:ugJdOWTQ うちのPCだと4.5.2が入らないんだけども
http://mog.tank.jp/up/src/mog11197.jpg
http://mog.tank.jp/up/src/mog11197.jpg
911デフォルトの名無しさん
2015/05/20(水) 22:52:40.74ID:2T6/P0Lm >>910
そうそう、起動時なんか構成に失敗しましたとかでて毎回復帰がかかっている
そうそう、起動時なんか構成に失敗しましたとかでて毎回復帰がかかっている
912デフォルトの名無しさん
2015/05/20(水) 23:36:56.86ID:DchNMAYq 休日プログラマです。
環境:Visual Studio 2012 express
SQLサーバ:SQL Server 2012 express
ODBCドライバを用いて、フォームから検索ワードを取得し、
C++/CLIでのプリペアドステートメントを発行して結果を取得したいのですが、
それを用いたlikeなど部分検索SQLの結果取得でハマったまま先に進めません。
SQLCHAR search[255];
std string sql = "select hoge, strhoge from hogetbl where strhoge like \%?\%";
SQLPrepare(hstmt,
(SQLTCHAR *) sql.c_str(),
,SQL_NTS);
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,sizeof(search),0,search,NULL);
SQLExecute(...
のように書いているのですが、プログラム上では何をやってもSQL_NO_DATAが返ります
あたりまえですがSQLそのものはServerのクエリで確認したところ通っています //?の所を'(任意文字列)'にした結果
また、SQL構文をLIKEの代わりにSQLのCHARINDEXを用い項目を増やして使ってみたのですが、同じようにダメでした。
// case when charindex(?,strhoge) > 0 then 1 else 0 end as searchflg ....
// where searchflg = 1 のように
ここには書き戻しできないのですが、escape句も試用したことがありますが、無理でした。
で、このLIKE以外は問題なく動きます。
また、他の機能はほとんどODBCで書いちゃったのでADOはやりたくないです。
何かいい方法ありませんでしょうか。よろしくお願いします。
環境:Visual Studio 2012 express
SQLサーバ:SQL Server 2012 express
ODBCドライバを用いて、フォームから検索ワードを取得し、
C++/CLIでのプリペアドステートメントを発行して結果を取得したいのですが、
それを用いたlikeなど部分検索SQLの結果取得でハマったまま先に進めません。
SQLCHAR search[255];
std string sql = "select hoge, strhoge from hogetbl where strhoge like \%?\%";
SQLPrepare(hstmt,
(SQLTCHAR *) sql.c_str(),
,SQL_NTS);
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,sizeof(search),0,search,NULL);
SQLExecute(...
のように書いているのですが、プログラム上では何をやってもSQL_NO_DATAが返ります
あたりまえですがSQLそのものはServerのクエリで確認したところ通っています //?の所を'(任意文字列)'にした結果
また、SQL構文をLIKEの代わりにSQLのCHARINDEXを用い項目を増やして使ってみたのですが、同じようにダメでした。
// case when charindex(?,strhoge) > 0 then 1 else 0 end as searchflg ....
// where searchflg = 1 のように
ここには書き戻しできないのですが、escape句も試用したことがありますが、無理でした。
で、このLIKE以外は問題なく動きます。
また、他の機能はほとんどODBCで書いちゃったのでADOはやりたくないです。
何かいい方法ありませんでしょうか。よろしくお願いします。
913デフォルトの名無しさん
2015/05/20(水) 23:56:15.34ID:/RusctZx 普通 '%' + ? + '%' とか書くんじゃないの。
914912
2015/05/21(木) 00:02:48.74ID:6QiHBSDD ああ、言い忘れていてすみません。
それもやりましたが、ダメでした
それもやりましたが、ダメでした
915デフォルトの名無しさん
2015/05/21(木) 00:43:36.74ID:vrFpc8wu コマンドには like ? と書いて、パラメータに%を指定するのはどう?
916912
2015/05/22(金) 01:16:43.85ID:YmYYGDUM うーん、それもやってみます。
あと、他の方はこうした事でハマったりは特にありませんでしたでしょうか。
書いてるのが一人でやってるのもあって、本当にプリペアドでの部分検索が可能かどうかが少し不安です
もちろん、突き詰めればなんでも可能なのでしょうけれども……
あと、他の方はこうした事でハマったりは特にありませんでしたでしょうか。
書いてるのが一人でやってるのもあって、本当にプリペアドでの部分検索が可能かどうかが少し不安です
もちろん、突き詰めればなんでも可能なのでしょうけれども……
917デフォルトの名無しさん
2015/05/22(金) 02:49:24.89ID:O8zMbXMa SQLTCHAR* 型に std::string のポインタ渡してるのは、問題ないの?
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【テレビ】粗品「THE W」バッサリ「おもんない、レベル低い」審査員就任で「日テレが“血の海”に…」 [湛然★]
- キ...キャ...キャ...キャン...
- (´・ω・`)おはよ
- 【悲報】女さん「ハローワークで仕事を探してる3-40代の中年男性いるでしょ。あれ何?」 [483447288]
- お前ら、豪雪地帯に一回住んでみろよ。 朝から晩まで雪に振り回される生活で死にたくなるから☃ [891140289]
- ( ・᷄ὢ・᷅ )博士メロつき界隈
- シコシコシコ………ドピュッ!⇦これなに?
