C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■3510  Re[1]: .Netリモーティングでスレッドセーフにするには?
□投稿者/ 囚人 -(2007/05/11(Fri) 21:18:11)
    スレッドセーフという概念自体が分らないという意味ですか?
    マルチスレッドでも安全に動くようにすることです。で、それは場合によるので一概に「こうやればいいよ」とは言いにくいです。

    同時にある変数に書き込んだらまずいのか、同時にファイルを開いたらまずいのか…etc…。別にそんな事を考える必要がない(読み取り専用のものしかない等)ならそれだけでスレッドセーフです。
記事No.3509 のレス /過去ログ12より / 関連記事表示
削除チェック/

■34242  Re[2]: std::stringの値がおかしい
□投稿者/ 門倉 雄大 -(2009/03/24(Tue) 10:41:55)
    No34241 (επιστημη さん) に返信

    お返事ありがとうございます。

    > どんな文字列食わすとおかしくなっちゃうですか?

    今はテスト中なので簡単な日記や歌詞のようなものを読み込ませてます。
    例えば落ちた例として、

    「世界に一つだけの花 EOL
     ひとつひとつ違う種を持つ EOL
     その花を咲かせる事だけに一生懸命になればいい EOL
     小さい花や大きな花 EOL
     ひとつとして同じモノはないから EOL
     」
    EOLは改行です。

    > # その文字列は10文字以上あるんですよね?

    必ずあります。
記事No.34240 のレス /過去ログ59より / 関連記事表示
削除チェック/

■53970  Re[3]: C#からエクセル操作(COUNTIF)
□投稿者/ ごう -(2010/10/01(Fri) 09:06:00)
    No53963 (ちか さん) に返信

    > ただ、今度は循環参照エラーが出始めて模索中です。

    エラーが出る内容について調べてみましたか?
    COUNTIFの第一引数で選択した「範囲」
    具体的にはR[?]C[-8] (※?の中には(intRowCnt * -1 + 7)で求めた数値が入りますよね)
    の中に、COUNTIF文を書いたセル自身を含めてしまっているからですよ。

    質問文を拝見した限りでは、
    (1)intRowCnt * -1 + 7にはどんな数字が入ってるか
    (2)COUNTIF文を記述するセルの列番号および行番号な何か
     
    これらの情報は私たちにはわかりませんので、C#のデバッガを使用してご自身で調べてください。
    (ヒントは、ブレークポイントを使うことです。)
    一応、デバッガの使い方について記述された下記URLを紹介しておきます。
    http://journal.mycom.co.jp/articles/2008/08/18/debug/index.html
記事No.53950 のレス /過去ログ90より / 関連記事表示
削除チェック/

■69069  Re[16]: vb.netからC++の文字列配列引数付DLLの呼び出し
□投稿者/ unagi -(2013/12/01(Sun) 18:48:38)
    No69050 (Azulean さん) に返信
    > C++/CLI で試そうと思ったら、元のマネージ String の長さがわからないからコピーを用意して、そのコピーのポインタ配列を用意してとややこしいことに
    > なってしまった。
    > 対象の関数が '\0' までしかバッファを見ないのなら、vector を1つ減らせると思います。
    > (marshal_context のスコープを長くして、sourceBuffers を消して、marshal_as<const char*> の戻り値を sourceArray に入れる)
    >
    > また、呼び出し時に 255 バイトを超える文字列がくる可能性や、MBCS 文字セットで表現できない文字がくる可能性を想定していませんので注意。
    >
    > // 知恵の拝借じゃなくて、丸投げだと思う。
    > // キーワードを示して話をしたところで解決が遅く、サンプルコードを示した方が速い聞き方になっているので。
    >
    > <コードを利用する方へ>
    > このコードは現状有姿のまま提供しているもので、不具合や脆弱性、非効率な処理が存在する可能性があります。
    > このコードを利用した時点で、利用者自身がすべての責任を負うこととし、投稿者は責任を一切持ちません。
    >
    >
    > #include <vector>
    > #include <msclr/marshal.h>
    > #include <cstring>
    >
    > using namespace System;
    >
    > namespace CppCliLib {
    >
    > public ref class CppWrapper
    > {
    > private:
    > static const size_t BUFFER_SIZE = 256;
    > public:
    > static int Execute(array<String^>^ sourceTexts,
    > [System::Runtime::InteropServices::OutAttribute] array<String^>^% destinationTexts)
    > {
    > int dataCount = sourceTexts->Length;
    > // ポインタ配列
    > // 元の配列の長さが可変長なのでvectorで管理
    > std::vector<char*> sourceArray(dataCount);
    > std::vector<char*> destinationArray(dataCount);
    > // 文字列バッファ
    > // 元の文字列の長さが不明であることと、DLLの関数が256バイトあることを前提に作っている
    > // 可能性を加味して、必ず自前のバッファにコピーする
    > std::vector<std::vector<char>> sourceBuffers(dataCount);
    > std::vector<std::vector<char>> destinationBuffers(dataCount);
    >
    > for (int i = 0; i < dataCount; ++i)
    > {
    > // バッファの準備
    > sourceBuffers[i].resize(BUFFER_SIZE);
    > destinationBuffers[i].resize(BUFFER_SIZE);
    > // ポインタ配列(vector)への代入
    > sourceArray[i] = &sourceBuffers[i][0];
    > destinationArray[i] = &destinationBuffers[i][0];
    >
    > // 元の文字列のバッファへのコピー
    > // marshal_asでメモリが確保されるが、marshal_contextのスコープが切れたら解放される
    > msclr::interop::marshal_context context;
    > strcpy_s(sourceArray[i], BUFFER_SIZE, context.marshal_as<const char*>(sourceTexts[i]));
    > }
    >
    > // DLL呼び出し
    > // TODO: 戻り値によって後の処理をする・しないを分ける必要があるかどうか?
    > int result = dllfunc(dataCount, &sourceArray[0], &destinationArray[0]);
    >
    > // 出力先バッファから出力先String^配列を作る
    > destinationTexts = gcnew array<String^>(dataCount);
    > for (int i = 0; i < dataCount; ++i)
    > {
    > // 出力先String^配列にバッファから文字列をコピーする
    > msclr::interop::marshal_context context;
    > destinationTexts[i] = context.marshal_as<String^>(destinationArray[i]);
    > }
    >
    > // 残しておいた戻り値を返す
    > return result;
    > }
    > };
    > }
    >

    Azulean さんへ
     
     返信が遅くなりましたが、丸投げ質問に対応頂き誠にありがとう御座います。
     ようやくC++の言語も判りかけてきたように思いますので、取り組んでみます。
記事No.68914 のレス /過去ログ117より / 関連記事表示
削除チェック/

■85891  Re[4]: 別のフォーム釦をおす
□投稿者/ しろ -(2017/11/30(Thu) 12:29:21)
    No85875 (魔界の仮面弁士 さん) に返信
    > ■No85874 (しろ さん) に返信
    >>Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    >> ' Form1 の新しいインスタンスを生成する
    >> Dim cForm2 As New Form1()
    >>
    >> ' Form1 を表示する
    >> cForm2.Show()
    >> Button1.PerformClick()
    >>End Sub
    >
    >
    > 自フォーム A の Button1 の Click イベントの中で、
    > 自フォーム A の Button1 の PerformClick を呼んでいるので、、
    > クリックイベントが延々と呼び出されてしまっています。
    >
    >
    > 他フォーム B (この場合は cForm2 なのかな?) のボタンを PerformClick しないと。

    「cForm2 なのかな?) のボタンを PerformClick しないと。」ってどうしたらよいのか
    意味が分からないのですが・・どうしないといけないんですか?


記事No.85851 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85901  Re[5]: 別のフォーム釦をおす
□投稿者/ Jitta -(2017/11/30(Thu) 15:31:41)
    No85891 (しろ さん) に返信

    > 「cForm2 なのかな?) のボタンを PerformClick しないと。」ってどうしたらよいのか
    > 意味が分からないのですが・・どうしないといけないんですか?

    人と話をする時、頼みごとをする時、何を気をつけますか?
    「誰が、何時、何を、何故、どこで、どうする」ということ、
    いわゆる1H5Wをはっきりと示さないでしょうか。
    プログラムコードとは、コンピュータに対して頼みごとをするための言語なので、
    人間に対するのと同じように、1H5Wを明らかにしなければなりません。
    Button1.PerformClick の Button1 は、どこにあるのでしょうか。
    今のコードだと、このコードを書いているフォームにあるものを示しています。
記事No.85851 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85902  Re[5]: 別のフォーム釦をおす
□投稿者/ WebSurfer -(2017/11/30(Thu) 16:06:52)
    No85891 (しろ さん) に返信
    
    > 「cForm2 なのかな?) のボタンを PerformClick しないと。」ってどうしたらよいのか
    > 意味が分からないのですが・・どうしないといけないんですか?
    
    質問者さんがやっているのは、自フォームのボタンクリックのイベントハンドラで、再度自フォー
    ムのボタンをクリックしているので、永久ループになっているのは分かりますか?
    
    やらなければいけないのは、自フォームのボタンクリックのイベントハンドラで生成した別フォー
    ムの中にあるボタンをクリックしなければならないということは分かりますか?
    
    そうするためには別フォームの中にあるボタンに外部からアクセスできる必要があるのですが、
    デザイナでツールボックスから Button を Form にドラッグ&ドロップするとその Button のアク
    セス修飾子は private になって外部からはアクセスできません。
    
    なので、例えば(あくまで例えばです)、外部から Button にアクセスできるようパブリックプロ
    パティを定義して、それを通じでアクセスすれば望むことができると思います。
    
    具体的には、Form2 というのを作ってそれに Button をドラッグ&ドロップしたとすると、以下
    のようにパブリックプロパティを追加します。
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            // button1 にアクセスするためのパブリックプロパティ
            public Button Button1
            {
                get { return this.button1; }
            }
        }
    }
    
    それを Form1 のボタンクリックで以下のように使います。
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.Security.Principal;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 f = new Form2();
                f.Button1.Click += Form2ButtonClick;
                f.Show();
                f.Button1.PerformClick();
            }
    
            private void Form2ButtonClick(object sender, EventArgs e)
            {
                MessageBox.Show("button clicked");
            }
        }
    }
記事No.85851 のレス /過去ログ147より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -