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

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

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

No.75394 の関連記事表示

<< 0 >>
■75394  Re[10]: VB.netからVC++6.0のへの構造体配列参照渡し
□投稿者/ 魔界の仮面弁士 -(2015/03/19(Thu) 20:05:29)
    No75392 (とら さん) に返信
    > 一括表示で2ページ目になっていたため気付くのが遅れました、すみません!
    > こちらでも同じようにやってみたのですが、タイプライブラリの生成に失敗しましたといったエラーが発生してしまいました。

    型公開は必要ですが、タイプライブラリを明示的に作る必要は無さそうです。

    もし、ComVisible を True にしても駄目なようならば、VS を管理者起動してみてください。
    レジストリ登録のためには管理者権限が必要なので。


    >> LPSAFEARRAY psa = *Type1;
    > 今回成功したパターンは、VC++で受け取った後にLPSAFEARRAY型に代入しているという事は
    いえ、説明文では C++ 側の関数定義を書いていなかったので、
    それが分かるにしただけです。引数自体は LPSAFEARRAY *Type1 のままですね。


    >> <ComVisible(True), Guid("8D60602D-452A-48A1-ACEF-AF148A6E41B8")> _
    > GUIDの部分が少々理解が追い付きませんでしたが、
    GUID は、『ネットワーク上で必ず一意であることが保障される128ビットの数値』です。

    ここでは、「クラス」「インターフェイス」「タイプライブラリ」などといった
    それぞれの COM オブジェクトに付けられた 128bit の識別番号だと思ってください。


    たとえば、ActiveX Data Object のタイプライブリには 00000205-0000-0010-8000-00AA006D2EA4 という
    GUID 値(LIBID) が割り当てられていますし、Excel の Application オブジェクトであれば、
    00024500-0000-0000-C000-000000000046 という GUID値(CLSID)が割り当てられているといった具合に。


    今回は、自作したデータ型なので、既存のGUID値ではなく、新規に用意した GUID 値を割り当てることになります。
    もし、構造体が複数あるのなら、それぞれに違う GUID を用意してください。Assmbly 側も然り。



    >> Guid.NewGuid().ToString("D")等で生成した値を指定
    > とありましたが、この値はこの関数を実行するたびに変化するのでしょうか
    はい。生成するたびに変わります。そして、同じ値は二度と生成されません。
    「重複しないランダムな値」を生成するものだと思ってください。


    > >(2) 構造体側にも、また別の GUID を割り当てておきます。
    > とありましたが、AssemblyInfo.vbに設定するGUIDと構造体に設定するGUIDは違うものにしておくのですか?
    重複する GUID 値を指定してはいけません。
    すべて別の値を使用する必要があります。

    複数の箇所で同じ GUID 値を使うことがあるとすれば、たとえば
    A.DLL と B.DLL と C.EXE が「同じ構造体」を再定義する場合などです。

    もっとも、そういう場合は、共有用のタイプライブラリを用意して、
    それを各プロジェクトで参照設定した方が分かりやすいですけれどね。
記事No.75306 のレス /過去ログ127より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -