[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 03/28 10:59 / Filesize : 176 KB / Number-of Response : 772
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++/CLI について語ろうぜ Part2



1 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 16:08:39 ]
おそらく、.NET開発でデファクトスタンダードに最も近い
であろうC++/CLIについて語ろうぜ!

このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は姉妹スレ「くだすれC++/CLI(初心者用)」に
お願いします。

前スレッドはこちら
(p)pc8.2ch.net/test/read.cgi/tech/1126450441/l50

姉妹スレ
くだすれC++/CLI(初心者用)
(p)pc8.2ch.net/test/read.cgi/tech/1142144110/l50
managed C++ やろうぜ!! 002
(p)pc8.2ch.net/test/read.cgi/tech/1139043535/l50


147 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 10:00:59 ]
>>145
C++ > (壁) > C丼
ということ?

148 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 19:12:10 ]
>>147
ヒント:DllImport

今は逆にC++(ただしネイティブ)の案件やってるが「これがC#だったらもっと楽なのに」と思いながらコード書いてる。

149 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 20:31:57 ]
BStrWrapper ってどうやって使うんでしょうか?
ググっても、ひっかかりもしねぇっす。

150 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 16:31:51 ]
こんにちは。質問です。

VC++EE使ってます。
system以下のライブラリを網羅したページってないですか?
C#やVBで解説されててもかまわないのでどこかご存知ありませんか?

151 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 16:50:50 ]
MSDN

152 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 17:51:19 ]
検索で引っかからなかったけど、MSDN普通にもぐってったらあった。OTL
なんでMFCなのかわからんけど、見つかってよかった。

ttp://msdn2.microsoft.com/ja-jp/library/ms306608.aspx

153 名前:デフォルトの名無しさん mailto:sage [2006/08/10(木) 00:00:25 ]
>>152
>MSDN ライブラリ > .NET 開発 > .NET Framework SDK > MFC リファレンス
うは、ほんとだwww

154 名前:ヽ(゚∀。)ノうぇね ◆xOFicusMP. mailto:sage [2006/08/26(土) 23:01:19 ]
あまり使ってる人もいないんだろうけど、ごめん、鯖が消えてた(´・ω・`)
引っ越したので、こちらを参照してください

ECMA-372仕様書
ttp://mdjowbnb.sv05.fsdotnet.net/ecma372/StartingState.aspx


155 名前:デフォルトの名無しさん mailto:sage [2006/08/27(日) 17:51:15 ]
>>154
乙です。お世話になってます。



156 名前:デフォルトの名無しさん mailto:sage [2006/09/05(火) 18:17:53 ]
C++/CLI で作ったクラスライブラリって、CLR Profiler 通る?
CLR Profiler いつも落ちるんだけど。

157 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:40:07 ]
/clr:pure 状態でも?

158 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 11:33:09 ]
/clrでコンパイルしたときにアンマネージコードの生成が

『〜〜用にネイティブ コードの生成が発生します』
と自動的に適用される場合と、

『この関数はマネージとしてコンパイルできません。#pragma をアンマネージで使用してください』
と明示しなければエラーになる場合があるんだけど、

両者の違いって分る人居ますか?

159 名前:デフォルトの名無しさん [2006/09/14(木) 00:40:15 ]
ISOは賢明な判断をしたな

160 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 01:05:14 ]
>>159

くわしく。

161 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:25:11 ]
これか
ttp://blogs.wankuma.com/episteme/archive/2006/09/12/38394.aspx

162 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:27:22 ]
これかな?
www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=42926

163 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:31:29 ]
間違えた orz
www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=43913&scopelist=PROGRAMME

164 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:52:40 ]
ま、駄目だった物は駄目、ということで

165 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 09:03:55 ]
まあ駄目で当然という気がする。
仕様が汚すぎる。上位互換じゃないのも(C++を名乗るには)問題。



166 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 13:57:57 ]
ちょっとホッとした。本当に賢明な判断だ。


167 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 01:56:05 ]
どっちの味方なんだよ

168 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 02:18:45 ]
最終的にまともなのになってくれれば過程はどうでもい

169 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 04:19:04 ]
C++をマネージ拡張するのもいいんだけど、
C#をアンマネージ拡張して欲しいと思うときがある。
まあ、DllImportすればいいんだけど。

170 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 01:34:15 ]
よくねーよ。
でもMSが持ってるNativeMethods.cs公開してくれたら、それでいい気がする。

171 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 01:44:50 ]
俺もそれほしい
PInvoke.net が不要になっちゃう

172 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 02:03:51 ]
結局、/CLIは今のところ使わない方が良いって事だなぁ…。


173 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 10:46:54 ]
sage

174 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 03:51:20 ]
C++/CLIって結局微妙ってこと?
@IT:特集:Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html
これとか見ると随分興奮しているけど

175 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 12:02:38 ]
>>174
ヒント: 川俣 晶



176 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 16:15:43 ]
海外だと、C++/CLIは凍るほど冷えてる。


177 名前:デフォルトの名無しさん [2006/11/20(月) 19:51:22 ]
>>176
そうなんかぁ〜?

178 名前:デフォルトの名無しさん [2006/12/03(日) 02:17:55 ]
DllImport関係のNativeMethod系以外に結局何が素敵なの? C++/CLIって
>>145
(言語熟練度はプロジェクト要員の平均レベルでC++/C#ができるものとして)
Manageなコード中に簡単にネイティブっぽいものが書けちゃうと逆にメンテし辛いものにならないのかな。

ところで、C++/CLIってC#3.0みたいな機能って予定されてるの?

179 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 03:11:41 ]
ネイティブの方が圧倒的に多かったり、
XP用のポーティングをしたり、
いろいろ便利なケースは想定できるでしょ?

どこまで厚くサポートされるかは分からない。
STL.NETみたいに辞めちゃったプロジェクトもあるし、
C++/CLIの人員削減はあり得ることだと思う。

180 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 08:56:56 ]
STL.NETはやめてはいないだろ。
OrcasのCTPにSTL/CLRが入っている。
どんなもんかまだ俺は試していないけど。

181 名前:デフォルトの名無しさん [2006/12/04(月) 15:49:06 ]
void func (String* str1, String* str2, String* str3) {
  String* str;
  str = System::String::Concat( str, str1 );
  str = System::String::Concat( str, '\0' );
  str = System::String::Concat( str, str2 );
  str = System::String::Concat( str, '\0' );
  str = System::String::Concat( str, str3 );
  str = System::String::Concat( str, '\0' );
  str = System::String::Concat( str, '\0' );
}

func("aaa","bbb","ccc");

上記で、"aaa\0bbb\0ccc\0\0"という値を期待していたのですが、\0が消えて"aaabbbccc"となってしまいます。
助けてください

182 名前:181 [2006/12/04(月) 15:57:05 ]
void fucn(string a, string b, string c) {
  string ret = "";
  ret = System.String.Concat( ret, a );
  ret = System.String.Concat( ret, '\0' );
  ret = System.String.Concat( ret, b );
  ret = System.String.Concat( ret, '\0' );
  ret = System.String.Concat( ret, c );
  ret = System.String.Concat( ret, '\0' );
  ret = System.String.Concat( ret, '\0' );
}
func("aaa","bbb","ccc");

あと、C#で上記のようにやった場合は期待通りの値になっているようです。
本当はC#で全部やろうと思ったのですが、C#でWin32APIの呼び出しが解らなくてC++/CLI使ってみました。
そのAPIの引数が、"aaa\0bbb\0ccc\0\0"という形式で指定しろとなっているのですが、
今度は引数が生成できなくて填ってます。

183 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 16:07:42 ]
>>182
やったこと無いんだが、
見た感じ、strcatと同じ動作に見えるね。

オペレータの+ってないの?

184 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 16:18:11 ]
>>183
ret += a;
今、上記のようにやってみたのですが、下記のエラーになってしまいました。。。

error C2297: '+=' : 無効な右オペランドです。
error C2845: '+=' : __gc ポインタ 'System::String __gc *' に対してポインタ演算ができません。


185 名前:デフォルトの名無しさん [2006/12/04(月) 16:47:32 ]
CLIは素人なのではずしてたらごめんね。
で、これ通ったよ。

using namespace System;

int main(array<System::String ^> ^args)
{   
    String^ A="Hello";
    String^ B="World";
    String^ C="";
    C=A+B;
    Console::WriteLine(C->ToCharArray());
    return 0;
}

と、ここまで書いて見落とし発見・・・。
なんだ、普通のstd::stringか?
ちょっとまってて。



186 名前:181 [2006/12/04(月) 17:03:45 ]
皆さん、ありがとう。
下記のようにして何とか動きました。

voidfunc(String*str1,String*str2,String*str3){
 LPTSTRpArg;
 LPTSTRpStr1=(LPTSTR)Marshal::StringToHGlobalAnsi(str1).ToPointer();
 LPTSTRpStr2=(LPTSTR)Marshal::StringToHGlobalAnsi(str2).ToPointer();;
 LPTSTRpStr3=(LPTSTR)Marshal::StringToHGlobalAnsi(str3).ToPointer();;

 intlen=0;
 len+=lstrlen(pStr1);
 len+=1;
 len+=lstrlen(pStr2);
 len+=1;
 len+=lstrlen(pStr3);
 len+=1;
 len+=1;

 pArg=(LPTSTR)malloc(len);

 len=0;
 memcpy(&pArg[len],pStr1,lstrlen(pStr1));len+=lstrlen(pStr1);
 memcpy(&pArg[len],"\0",1);len+=1;
 memcpy(&pArg[len],pStr2,lstrlen(pStr2));len+=lstrlen(pStr2);
 memcpy(&pArg[len],"\0",1);len+=1;
 memcpy(&pArg[len],pStr3,lstrlen(pStr3));len+=lstrlen(pStr3);
 memcpy(&pArg[len],"\0",1);len+=1;
 memcpy(&pArg[len],"\0",1);len+=1;

 func(pArg);
 free(pArg);
}

187 名前:デフォルトの名無しさん [2006/12/04(月) 17:04:51 ]
ミスった・・・

voidfunc(String*str1,String*str2,String*str3){
 LPTSTR pArg;
 LPTSTR pStr1=(LPTSTR)Marshal::StringToHGlobalAnsi(str1).ToPointer();
 LPTSTR pStr2=(LPTSTR)Marshal::StringToHGlobalAnsi(str2).ToPointer();;
 LPTSTR pStr3=(LPTSTR)Marshal::StringToHGlobalAnsi(str3).ToPointer();;

 int len=0;
 len+=lstrlen(pStr1);
 len+=1;
 len+=lstrlen(pStr2);
 len+=1;
 len+=lstrlen(pStr3);
 len+=1;
 len+=1;

 pArg=(LPTSTR)malloc(len);

 len=0;
 memcpy(&pArg[len],pStr1,lstrlen(pStr1));len+=lstrlen(pStr1);
 memcpy(&pArg[len],"\0",1);len+=1;
 memcpy(&pArg[len],pStr2,lstrlen(pStr2));len+=lstrlen(pStr2);
 memcpy(&pArg[len],"\0",1);len+=1;
 memcpy(&pArg[len],pStr3,lstrlen(pStr3));len+=lstrlen(pStr3);
 memcpy(&pArg[len],"\0",1);len+=1;
 memcpy(&pArg[len],"\0",1);len+=1;

 func(pArg);

 free(pArg);
}

188 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:10:58 ]
>>181お前それC++/CLIではなく、マネージドC++だろ。
とりあえず、こうすると.NET 2003の/clrと2005の/clr:OldSyntaxで動く(実行するとaaaしか表示されない)。
#using <mscorlib.dll>
#include <vcclr.h>
#include <windows.h>
#pragma comment(lib, "user32.lib")
void func (System::String* str1, System::String* str2, System::String* str3) {
  using System::String;
  String* str;
  str = String::Concat(str, str1);
  str = String::Concat(str, S"\0");
  str = String::Concat(str, str2);
  str = String::Concat(str, S"\0");
  str = String::Concat(str, str3);
  str = String::Concat(str, S"\0");
  str = String::Concat(str, S"\0");
  const wchar_t __pin* p = PtrToStringChars(str);
  ::MessageBoxW(0, p, L"", MB_OK);
}
int main()
{
  func("aaa","bbb","ccc");
}
まあAPIの相手をするならchar配列のほうが楽。
>>187 せめてsprintf使え。あとLPTSTRをマルチバイト文字列に使うな。

189 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:11:03 ]
こらこら、ANSI文字列のポインタをLPTSTRで受けちゃダメだぞ。

190 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:14:53 ]
…なんだか口は悪いけど親切なお兄さんと結婚することになりそうです。

191 名前:188 [2006/12/04(月) 17:22:28 ]
>>188
動きました!

192 名前:181 mailto:sage [2006/12/04(月) 17:22:51 ]
名前欄まちがえた

193 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:30:11 ]
あと、Marshal::StringToHGlobalAnsiで確保したメモリを開放していないな。

方法は幾通りもある。あんマネージ文字列への変換はCString (ATL/MFC 7以上)使うのと結構楽。
TCHARも適当にやってくれるし。
#using <mscorlib.dll>
#include <atlstr.h>
#include <windows.h>
#pragma comment(lib, "user32.lib")

void func (System::String* str1, System::String* str2, System::String* str3)
{
  using ATL::CString;
  CString cs1(str1), cs2(str2), cs3(str3);
  CString arg;
  arg.Format(TEXT("%s\0%s\0%s\0"), static_cast<PCSTR>(cs1), static_cast<PCSTR>(cs2), static_cast<PCSTR>(cs3));

  ::MessageBox(0, arg, TEXT(""), MB_OK);



194 名前:185 mailto:sage [2006/12/04(月) 17:37:49 ]
>>186-188
ほかの方法があったか。
色々考え出したら止まらなくって困ってたとこだった。
役に立てなくてすまない。

#include <string>
#include <iostream>
int main(array<System::String ^> ^args)
{
    std::string A="BMP",B="Wav";
    std::string C="";
    
    C=A+'\0'+B+'\0'+'\0';
    std::cout<<C<<std::endl;
    //std::cout<<C.c_str()<<std::endl;

    return 0;
}

こういう感じの想定してた。@VC2005EE

195 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:44:41 ]
>>193の方法は短いですけど、>>188の方が見やすそうなので、使わせてもらいました。
色々勉強になりました



196 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:56:57 ]
CLIだが最終的にこんなんなった。

std::string func(String^ str1, String^ str2, String^ str3)
{
    IntPtr ptr1 = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str1);
    IntPtr ptr2 = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str2);
    IntPtr ptr3 = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str3);

    std::string result = std::string()
        + reinterpret_cast<const char *>(ptr1.ToPointer()) + '\0'
        + reinterpret_cast<const char *>(ptr2.ToPointer()) + '\0'
        + reinterpret_cast<const char *>(ptr3.ToPointer()) + '\0'
        + '\0';

    System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr1);
    System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr2);
    System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr3);

    return result;
}


197 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 18:23:57 ]
>>195
せめてStringBuilder使え。

198 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 23:45:05 ]
ふつうに wstring 使った方が早くね?

199 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 23:49:36 ]
String::Format 使えばいいと思う……

200 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 00:23:34 ]
>>199
>>193で出たものの、>>195で却下された。

201 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 11:03:39 ]
個人的には(作成理由から読むに) C# で DLLImport の方法を探した方が遥かに楽だったんじゃないかという気がするけど。

色んな選択肢を使える懐の深さが C++/CLI の一つの魅力なわけだし、
最速/高効率よりも、本人が理解/吸収しやすい手法を取るのが最良だと思う。

202 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 16:10:02 ]
さすがに、それを最良と言い切るのはおかしいな。
言いたいことはわかるが、言葉の選択を誤ってるね。


203 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 23:36:10 ]
www.rupan.net/uploader/download/1167834884.zip
PASS: CLI

204 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 00:27:15 ]
>>203
これってなんだったの?

205 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 00:31:07 ]
仕様書のスキャン画像



206 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 01:07:33 ]
C++/CLIでWPFの開発できないの?

207 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 18:54:27 ]
できないほうが不思議

208 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 04:46:46 ]
IDEのサポートがあるかどうかは別問題だけどね。

209 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 20:21:14 ]
C++/CLIでのWPF開発ではIDEのサポートは無いの?

210 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:27:14 ]
XAMLPadで十分じゃん
どうせUIはC++じゃなくてXMLで書くんだし

211 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:27:51 ]
Visual Studio 2007(2008?)には標準で入るはず。

212 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:31:33 ]
literalって何のために追加されたの?
constでいいじゃん。

213 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 16:28:43 ]
>>212
よく知らんが、名前の通りリテラルの為なんじゃないのか?

214 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 17:59:55 ]
いやだってManaged C++ではstatic constで済んでいただろ。

215 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 22:20:44 ]
フィールドにCILで言うところのliteral属性をつけるか否かを区別できるようになった



216 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 23:10:16 ]
Managed C++ではunmanagedなものとの区別があいまいだったから、
出来るだけ違う名前を付けるようにしたとかそんなのじゃないの?
参照周りとかgcnewとか見ててもそういう思想に見えるんだが

217 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 19:24:28 ]
流れぶった切って申し訳ないですが、質問です。

C++/CLIで、既存のネイティブ関数をラップして、
public ref class Test
{
public :
static void show( System::Int32^ x ) {}
static void show( System::Double^ x ) {}
};

というようなクラスを作って、C#から

static void main()
{
Test.show( 1 );
Test.show( 2.0 );
}

という風にオーバーロードして呼び出たんですが、
次のメソッドまたはプロパティ間で呼び出しが不適切です: 'Test.show(System.ValueType)' と 'Test.show(System.ValueType)'
というエラーがでて、コンパイルできませんでした。

エラーをみると、引数のSystem::Int32とSystem::DoubleがSystem::ValueTypeになってる
っぽいんですが、正しくラップするにはどういう風に書くんでしょうか?


218 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 19:34:18 ]


219 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 20:42:10 ]
>>217
そういうこと。値型はハンドルを使わず生の型を使え。

C++/CLIで値型へのハンドルはボックス化の扱い。
IL上の引数・戻り値は、System.ValueType(これ自体は参照型)となる。
vene.wankuma.com/ecma372/33_cli_library.aspx#SS.33.1.5.1

基の型の情報も記録しているので、IL上は多重定義可能で、
C++/CLIでもコンパイラがそれを認識して多重定義解決を行う。
しかしC#コンパイラはそれを知らないので、
単にSystem.ValueTypeを1つ引数に取るメソッドshowが2つあるとしか認識できない。


220 名前:217 mailto:sage [2007/04/09(月) 23:01:02 ]
>>218-219
なるほど。
解決しました!ありがとうございます。


221 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 18:06:56 ]
○コンストラクタ
StreamReader^ FormDataReader = gcnew StreamReader("FormData.txt", System::Text::Encoding::GetEncoding("shift-jis"));

String^ locationX = MainFormDataReader->ReadLine();
String^ locationY = MainFormDataReader->ReadLine();
String^ SizeW = MainFormDataReader->ReadLine();
String^ SizeH = MainFormDataReader->ReadLine();

locationX = locationX->Substring(locationX->IndexOf("=") + 1);
locationY = locationY->Substring(locationY->IndexOf("=") + 1, locationY->IndexOf("}") - locationY->IndexOf("=") - 1);

SizeW = SizeW->Substring(SizeW->IndexOf("=") + 1);
SizeH = SizeH->Substring(SizeH->IndexOf("=") + 1, SizeH->IndexOf("}") - SizeH->IndexOf("=") - 1);

this->SetDesktopBounds(int::Parse(locationX), int::Parse(locationY), int::Parse(SizeW), int::Parse(SizeH));

MainFormDataReader->Close();

//最初の表示位置を記録
this->OnResizeEnd(nullptr);

○デストラクタ
StreamWriter^ FormDataWriter = gcnew StreamWriter("FormData.txt", false, System::Text::Encoding::GetEncoding("shift-jis"));

MainFormDataWriter->WriteLine(this->WindowState);
MainFormDataWriter->WriteLine(LocationString->Replace(",", "\r\n"));
MainFormDataWriter->WriteLine(SizeString->Replace(",", "\r\n"));
MainFormDataWriter->WriteLine(splitContainer1->SplitterDistance);
MainFormDataWriter->WriteLine(splitContainer2->SplitterDistance);

MainFormDataWriter->Close();

222 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 18:09:35 ]
○初期設定
String^ LocationString;
String^ SizeString;
this->ResizeEnd += gcnew System::EventHandler(this, &MainForm::MainForm_ResizeEnd);

○フォームのサイズと位置を取得する
private: System::Void MainForm_ResizeEnd(System::Object^ sender, System::EventArgs^ e) {
LocationString = "" + this->Location;
SizeString = "" + this->Size;
}

長かったので分割してカキコしました
今日出された課題でフォーム位置を記録するという物があったのですが、どうしても汚くなってしまいます。
もう少し効率の良いフォーム位置の記録方法はありませんか?

223 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 21:05:32 ]
なんつうかきったねえな、おい。

Hashtableに格納してシリアライズするとか、
シリアライズ可能な構造体を定義してそれを保存するとか、
自前で読み書きするにしても、せめて、生の整数値で保存しろよ。

224 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 22:03:19 ]
>>223
ご指摘ありがとうございます

>自前で読み書きするにしても、せめて、生の整数値で保存しろよ。
苦肉の策で、無理矢理保存してました(汗

225 名前:デフォルトの名無しさん [2007/05/10(木) 08:14:13 ]
String^ a = "a";
String^ b = a;
a = "b";

これでbが"b"にならないのはどういう仕組みなんでしょうか?
いろいろ調べましたが結局わかりません。



226 名前:デフォルトの名無しさん [2007/05/10(木) 08:18:49 ]
int n = 1;
int* a = &n;
int* b = a;

int m = 2;
a = &m;

で b が 2 になりません、って言ってるのと同じこと。

227 名前:デフォルトの名無しさん [2007/05/10(木) 08:19:26 ]
間違えた。*b が 2 に、だった。

228 名前:デフォルトの名無しさん [2007/05/10(木) 08:44:36 ]
>>226
ありがとう。なんかぼけてました。(;´Д`)

229 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 21:09:57 ]
(゚Д゚)

230 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 01:46:32 ]
致命的なエラーです。 (HRESULT からの例外: 0x8000FFFF (E_UNEXPECTED))

という警告がデザイナーで急に頻繁に表示されるようになってしまったのですが、
どなたか解決策をご存じありませんか?

コンパイルはちゃんとできるんですけど...

231 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 18:01:24 ]
言語伝々自体にドトネトコード自体がお呼びじゃないからな。

232 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 22:56:54 ]
誤爆け?

233 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 16:56:09 ]
でんでん?
云々の間違いなんだろうが、どうすればそんな間違いが起こるんだw

234 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 17:16:41 ]
>伝々
思わずふいてしまた

235 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 16:01:13 ]
treeViewの再描画を一時停止したいんだけどどうすれば良いの?



236 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:22:17 ]
初めまして、VC++のC++/CLIのフォームアプリケーションについて質問があります。

今、LimeChat 2 の様なアプリを作っていています。
そのアプリのテキストボックスには、カーソルが表示されていません。
どのようにすれば、カーソルを表示させないようにできるのでしょうか?

また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?

237 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 00:24:49 ]
再描画のハンドラをオーバーロードして
止めたいときだけ無視する。

238 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 00:28:12 ]
自己解決しました!
>>また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?
treeView->BeginUpdate();

キャレットが出無くなればいいわけです
Win32 APIにHideCaretという関数があるのですが、C++/CLIではどうしても見つけることができませんでしたorz

239 名前:デフォルトの名無しさん [2007/05/27(日) 15:49:02 ]
iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

この関数のinbufにString^を渡したいのですがうまくキャストできません。

pin_ptr<const wchar_t> pIn = PtrToStringChars(in);
pin_ptr<const char> pInPass = pin_ptr<const char>pIn; // error

iconv(cd, &pInPass, &inlength, pOutPass, &outlength) )

どうやってキャストすればいいのでしょうか?

240 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 20:26:06 ]
pInの段階で既にpinされているのだから、後は普通のC++と同じように
const char* pInPass = reinterpret_cast<const char*>(pIn);でいいと思う。

241 名前:かも [2007/05/27(日) 23:33:12 ]
だれか、ニューメリカルレシピインシーっていう本やったことある人いませんか(??)

242 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 02:05:15 ]
>>239
msdn2.microsoft.com/ja-jp/library/1b4az623(VS.80).aspx
String^からstd::stringにしてc_str()で渡せば。

243 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 10:20:36 ]
>240
できました。ありがとう。

>242
できればコピーしないでやりたかったので。

244 名前:デフォルトの名無しさん [2007/05/29(火) 18:10:26 ]
こんなものC++の標準が改定されたら置いてきぼりになるじゃんか
志ねMS

245 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 19:22:06 ]
C++/CLIはC++ではないと何度言ったら分かるんだね。



246 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 19:25:48 ]
C++自体がC99から置いてきぼりになってますが何か?


でもってC++/CLIも世界標準規格のわけだが

247 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:05:06 ]
世界標準言ったって、盲判で有名なECMAだろ?
ちょっとまえにISOに蹴られたばっかじゃん。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<176KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef