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

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

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

全過去ログを検索

<< 0 >>
■3531  Re[3]: fromの中に別のfromを表示させたいです。
□投稿者/ ぽぴ王子 -(2007/05/14(Mon) 14:58:42)
>
    No3530 (ゆりゆり さん) に返信
    
    フォームを New しただけでは表示されていない状態なので
    
            form1 = New 表示したい別のform名
            form1.TopLevel = False
            Me.SplitContainer1.Panel2.Controls.Add(form1)
            form1.Show()
    
    という感じで。
    これは知らないと結構ハマったりしますので、難しかったかもしれませんね。
    # と、むかしハマったことのある私が言ってみる。
    
    
    
    > 会社に入って1ヶ月半、言語を触りだしても同じ月日なので、右も左もわからず
    > せこせこControlsについて調べていました。
    
    回答とは直接関係ないですが、会社に入って1ヶ月半ということは、まだ新人研修
    か何かでしょうか。
    その場合は、講師役の先輩などに聞くことはできませんか?
    じゃんぬさんに教えられたことをちゃんと調べて勉強されているのはとても偉い
    (それこそウチの会社に入れたいぐらいだわ)と思いますが、新人研修中であれば
    近場に聞く人もいても良さそうだなと思ったもので。
記事No.3507 のレス /過去ログ12より / 関連記事表示
削除チェック/

■23618  Tableの位置ずれ、お気に入りのアイコンの設定方法について
□投稿者/ 開発者駆け出し -(2008/08/19(Tue) 14:05:33)

    分類:[ASP.NET (VB)] 

    お世話になります。

    環境
    OS:XPProSP2
    ソフト:VWD2008(VB.NET)

    2点お聞きしたいことがあります。

    1.ASP.NETのページにUpdataPanelを置き、その上に
    Tableが置いてあり、そのテーブルの中にいくつかコントロールがおいてあります。
    実行した時に、画面を最大化すると思ったとおりの表示が出来るのですが、
    画面を小さくすると一個分位Tableの位置が下にずれてしまいます。横幅が足りない時はスクロールバーでと思い
    Tableに対してスクロールバーを入れてみたのですが効果がありません。
    画面のサイズに関わらず配置されているコントロールの位置を絶対的に指定する方法ってあるのでしょうか?

    2.作成したWebページをお気に入りに登録してもらった時に
    お気に入りに入っているアイコンを変更する方法がありますか?
    (紙に小文字のeが書いてあるようなアイコンを指定されたアイコンに変更する方法という意味です)
    ちょっと分かりづらいかもしれませんが、ご教示お願い致します。
親記事 /過去ログ45より / 関連記事表示
削除チェック/

■83706  Visual C++
□投稿者/ バナナマン -(2017/04/03(Mon) 21:41:51)

    分類:[C++/CLI] 

    Visual C++ で質問です。

    checkboxを設けてチェックが入っているときは numericUpDown のボックスを無効にしたいです。(グレー状態にして書き込み不可)


    private: System::Void checkBox1_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
    if (checkBox1->Checked)
    {
    numericUpDown1->false;
    }

    的な簡単にはいかないのですね、、、

    どなたか教えて頂けませんでしょうか
親記事 /過去ログ143より / 関連記事表示
削除チェック/

■91223  Re[3]: VB.NETからC++のdll関数への参照渡しについて
□投稿者/ 魔界の仮面弁士 -(2019/06/06(Thu) 15:20:06)
    2019/06/07(Fri) 11:30:36 編集(投稿者)

    ※Console.WriteLine 時にスペルミスしていたので、コードを再整理

    No91214 (まる さん) に返信
    > VB6ではなぜ上手くいき

    参照設定で配列を渡す場合は、SAFEARRAY や VARIANT で丸ごと受け渡していたので、
    配列の先頭要素を参照渡しする方法は経験が無いのですよね…。

    Declare な方では、先頭要素を参照渡しする方法も良く使っていたのですが。


    > cpp,hpp,odlそれぞれに記載されたAAAの宣言を編集する必要がある、という事でしょうか…?

    C++ 側は専門外なので、こっちは何とも。


    >>> Dim objHandle As GCHandle = GCHandle.Alloc(shtArray(0),GCHandleType.Pinned)
    >>> Dim intPinned As Intptr = objHandle.AddrOfPinnedObject()


    intPinned をどうやって DLL に渡すのかが読み取れなかったのですが、
    先頭要素だけを Pinned しても駄目だと思います。


    Imports System.Runtime.InteropServices
    Module Module1

      Sub Main()
        Dim bin As Byte() = {&H11, &H22, &H33, &H44, &H55, &H66, &H77, &H88, &H99, &HAA, &HBB, &HCC, &HDD, &HEE, &HFF}
        'Dim bin As Byte() = {&HFE, &HDC, &HBA, &H98, &H76, &H54, &H32, &H1F, &HED, &HCB, &HA9, &H87, &H65, &H43, &H21}

        Console.WriteLine("=== bin (サンプルデータ) ===")
        Dump(bin)

        ' bin よりも少し大きめに確保
        Dim ary1 As Short() = Enumerable.Repeat(&H1234S, 20).ToArray()
        Dim ary2 As Short() = Enumerable.Repeat(&H1234S, 20).ToArray()

        Console.WriteLine("=== Short 配列全体を Pinned した場合 ===")
        Dim h1 As GCHandle = GCHandle.Alloc(ary1, GCHandleType.Pinned)
        CopyMemory(bin, h1)
        h1.Free()

        Console.WriteLine("=== Short 配列の先頭要素だけを Pinned した場合 ===")
        Dim h2 As GCHandle = GCHandle.Alloc(ary2(0), GCHandleType.Pinned)
        CopyMemory(bin, h2)
        h2.Free()

        Console.WriteLine("=== ary1 は書き換わっている ===")
        Dump(ary1)

        Console.WriteLine("=== ary2 は書き換わらない ===")
        Dump(ary2)

        Console.ReadLine()
      End Sub

      Sub CopyMemory(source As Byte(), h As GCHandle)
        Dim t As Type = h.Target.GetType()
        Console.WriteLine("Target Is {0} / {1}", TypeName(h.Target), t.Name)
        Dim et As Type = If(t.IsArray(), t.GetElementType(), t)
        Dim sz As Integer = Marshal.SizeOf(et)
        Dim p As IntPtr = h.AddrOfPinnedObject()
        Console.WriteLine("p => 0x{0:X} (address)", p)

        Console.WriteLine("--- コピー前 ---", p)
        Console.WriteLine("p = 0x{0:X}", Marshal.ReadInt64(p))
        For n = 0 To 3
          Console.WriteLine("p[{0}] = 0x{1:X}", n, Marshal.PtrToStructure(IntPtr.Add(p, n * sz), et))
        Next

        Marshal.Copy(source, 0, p, source.Length)

        Console.WriteLine("--- コピー後 ---", p)
        Console.WriteLine("p = 0x{0:X}", Marshal.ReadInt64(p))
        For n = 0 To 3
          Console.WriteLine("p[{0}] = 0x{1:X}", n, Marshal.PtrToStructure(IntPtr.Add(p, n * sz), et))
        Next
      End Sub

      Sub Dump(Of T As Structure)(ary As T())
        Dim bytes As Integer = Marshal.SizeOf(Of T)()
        Console.Write(" Len={0}:", bytes * ary.Length)
        Dim fmt As String = " {0:X" & CStr(2 * bytes) & "}"
        For Each x As T In ary
          Console.Write(fmt, x)
        Next
        Console.WriteLine()
      End Sub
    End Module
記事No.91199 のレス /過去ログ157より / 関連記事表示
削除チェック/

■91224  Re[4]: VB.NETからC++のdll関数への参照渡しについて
□投稿者/ とっちゃん -(2019/06/06(Thu) 15:56:48)
    No91214 (まる さん) に返信
    >>ActiveX DLL の場合はタイプライブラリ次第かな…。
    > ActiveXに対して不勉強のため、正しいかどうかわかりかねているのですが、
    > odlファイルにてタイプライブラリの作成に必要なものが記載されているようでした。
    > cpp,hpp,odlそれぞれに記載されたAAAの宣言を編集する必要がある、という事でしょうか…?

    C++のDLL(ActiveX コントロール)はそのまま使う想定ですか?
    もしそのCOMDLLをそのまま使うのなら、開発マシンに登録して(しておかないと参照できない)
    参照で追加すればいいと思います。

    そのうえで、VB.NET から見えるインターフェース定義を改めて確認し
    どういう風に変更すればいいかを見極めたほうが安定します。

    VB6のCOM呼び出しは、当時のVB自身の仕組みの効果もあり信じられないくらい
    それで行けるのか?という項目があるので、ちょっと怪しい独自COMの場合
    移植不可能というのがあります。

    No91223 (魔界の仮面弁士 さん) に返信
    > Declare な方では、先頭要素を参照渡しする方法も良く使っていたのですが。
    >
    基本は一緒です。
    ただ、declare しないから、取り込まれた定義に合わせた書き方にする必要があるというくらいかな。
    どういう風に取り込まれるかで書き方も変わるので何とも言えないところもありますけど。
記事No.91199 のレス /過去ログ157より / 関連記事表示
削除チェック/

■91268  Re[5]: VB.NETからC++のdll関数への参照渡しについて
□投稿者/ まる -(2019/06/09(Sun) 23:38:16)
    2019/06/09(Sun) 23:38:54 編集(投稿者)
    2019/06/09(Sun) 23:38:46 編集(投稿者)

    返信が遅れてしまい申し訳ございません。投稿者(まる)です。

    No91224 (とっちゃん さん) に返信
    > VB6のCOM呼び出しは、当時のVB自身の仕組みの効果もあり信じられないくらい
    > それで行けるのか?という項目があるので、ちょっと怪しい独自COMの場合
    > 移植不可能というのがあります。
    とっちゃんさん、ご回答いただきありがとうございます。
    そうだったのですね。VB6ではなぜ可能だったのにvb.netでは駄目になったのか、少し納得できたような気がします。


    No91223 (魔界の仮面弁士 さん) に返信
    >intPinned をどうやって DLL に渡すのかが読み取れなかったのですが、
    すみません。まだGCHandleに対して勉強不足な部分があり、
     GCHandle.Alloc(shtArray(0),GCHandleType.Pinned)
    でshtArray(0)を固定したら、intPinnedをAAAに渡さずshtArray(0)を渡しても、固定されたまま渡せるのかな?と
    浅い知識で書いてしまいました。仮面弁士さんに書いて頂いたわかりやすいソースコードのおかげで、
    アドレス固定の方法について、より理解することができました。ご丁寧に説明して頂き、ありがとうございます。
    ただ、
     GCHandle.Alloc(shtArray,GCHandleType.Pinned)
    と書いた上で再度挑んでみましたが、エラーを解消することはできませんでした。


    あの後、vb.net側が駄目ならC++のソースコードを少し変えてみよう、と自分なりに視点を変えて挑み、
    以下のURLを参考にC++の内容を変えてみたところ、とりあえずはエラーなく上手くいくようになりました。
    https://limbioliong.wordpress.com/2011/06/08/passing-a-managed-array-to-a-c-activex-via-a-pointer/
    https://social.msdn.microsoft.com/Forums/ja-JP/254aadda-5558-4076-b598-95aebc208f43/65315652831236312425653276531565336124081250912452125311247912?forum=csharpgeneralja


    (c++ .odlファイル)
    [id(xx)] AAA(SHORT *add,SHORT size)

    [id(xx)] AAA([in, out] SAFEARRAY(Short)*varData,Short data)


    (c++ .hpp)
    Long AAA(Short Far* sAdd,Short sSize)

    Long AAA(VARIANT &varData,Short sSize)


    (C++ .cppファイル)
    ※ディスマッチマップの部分
    DISP_FUNCTION_ID(xxx, "AAA", AAA, VT_I4, VTS_PI2, VTS_I2)

    DISP_FUNCTION_ID(xxx, "AAA", AAA, VT_I4, VTS_VARANT, VTS_I2)


    ※AAA関数処理の部分
    LONG AAA(VARIANT &varData, sSize)
    {
    Short bufSize = sSize * 2;
    Char *buf;
    Char *strValue;
    SAFEARRAY *pSA = NULL;
    SAFEARRAYBOUND bd;
    Short HUGEP *p;

    bd.lLbound = 0;
    bd.cElements = 12;
    pSA = SafeArrayCreate(VT_I2, 1, &bd);
    SafeArrayAccessData(pSA, (void HUGEP **)&p);
    buf = (Char *)p;

    memset(buf,0,bufSize);

    (省略)※strValueに値を格納;

    memcpy(buf,strValue,bufSize);

    pSA->pvData = (LPVOID)p;
    SafeArrayUnaccessData(pSA);
    *pVarData.pparray = pSA;

    return bufSize;
    }


    (VB.Net)
    sub Sample()
    Dim shtArray(999) As Short
    Dim objTest As New TestClass
    Dim intReturn As Integer
    Dim intSize As Integer = 368

    (省略) ※省略した中でshtArrayの全ての要素に0を設定しています。

    intReturn = objTest.AAA(shtArray,intSize)
    '※visualstudioでAAAにカーソルをあてて引数の型を確認したところ、
    ' AAA(Byref sBuf As System.Array,ByVal sSize As Short) As Integer
    ' となっておりました。

    Msgbox(intReturn)
    end sub


    しかし、この件についてメンバーに相談したところ、結局、ActiveXは古いので、この機会にC++をvb.netにするところからはじめよう、ということになり、
    この件は保留となってしまいました。
    ですが、個人的には今回の件の中で、皆さまのおかげで色々な知見を得られ、成長することができたので、エラー解決に挑んだことは無駄ではなかったと感じております。
    ご回答頂いた仮面弁士さん、とっちゃんさん、目を通していただいた方々、本当にありがとうございました。
    またの機会がございましたら、どうぞよろしくお願いいたします。
記事No.91199 のレス / END /過去ログ157より / 関連記事表示
削除チェック/

■93614  Over句について
□投稿者/ 犬夜叉 -(2019/12/27(Fri) 09:08:56)

    分類:[.NET 全般] 

    以下のような日付と休みのデータ(DATETABLE)があり

    Date Yasumi
    :
    20191220 1 -4
    20191221 2
    20191222 2
    20191223 1 -3
    20191224 1 -2
    20191225 1 -1
    20191226 1 0
    20191227 1 1
    20191228 2
    20191229 2
    :

    今日(12/27)を境に平日で
    以下のように何日後、何日前を得る場合

    Date Offdate
    :
    20191220 -4
    20191223 -3
    20191224 -2
    20191225 -1
    20191226 0
    20191227 1
    :

    SELECT Date, ROW_NUMBER() OVER(ORDER BY Date) AS Offdate
    FROM DATETABLE
    WHERE Yasumi = 1
    AND Date >= 20191227
    UNION
    SELECT Date, 1 - ROW_NUMBER() OVER(ORDER BY Date DESC) AS Offdate
    FROM DATETABLE
    WHERE Yasumi = 1
    AND Date < 20191227

    で、求めたのですがUnionを使用しないで
    Over句のRowsを使用してできるような気がしたのですが
    できないのでしょうか?


親記事 /過去ログ162より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -