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

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

C# と VB.NET の入門サイト

C入門 [1]

[トピック内 23 記事 (21 - 23 表示)]  << 0 | 1 >>

■86146 / inTopicNo.21)  Re[13]: C入門
  
□投稿者/ 魔界の仮面弁士 (1522回)-(2017/12/21(Thu) 15:47:07)
No86142 (masa さん) に返信
> VT_RECORDについてはギブアップです。
レジストリ登録も必要です。

> EXCELのバージョンは2007ですがVB6以降ですよね。サポート対象外なんでしょうか?
VBA の場合は、ユーザー定義型をコード内で定義するのではなく、
uuid 属性付きの構造体をタイプライブラリで定義し、
それを参照設定するようにします。

//
// SAMPLE.IDL
//
[uuid(8E79CB59-227A-4400-BA58-C99254CE7794),version(1.0)]
library ClassLibrary1 {
typedef [uuid(C2D51482-C876-4A47-A488-FA7997EA050C), version(1.0)] struct tagMyType {
  short Member1;
} MyType;
};


あるいは、VB.NET や C# で COM DLL を作成し、
それを VBA から参照設定して利用する形でも構いません。

//
// MyType.vb
//
Imports System.Runtime.InteropServices
<ComVisible(True), Guid("C2D51482-C876-4A47-A488-FA7997EA050C")>
Public Structure MyType
  Public Member1 As Short
End Structure


.NET で用意する場合は、プロジェクトのプロパティで、
[COM 相互運用機能の登録] を有効にして、レジストリに登録させます。
(もしくは、自身で RegAsm.exe しても構いません)

COM 相互運用機能の登録 を有効にした場合には、コンパイル時に、
 HKEY_CLASSES_ROOT\Record
などへの書き込みが発生しますので、パブリック構造体を公開させるのであれば、
Visual Studio を管理者起動しておくことも忘れないようにしましょう。


このようにして生成・登録されたタイプライブラリを参照設定すれば、
Excel VBA であっても
  Dim c As MyType
  Debug.Print VarType(c) '=36
という結果を得ることが出来ます。
引用返信 編集キー/
■86157 / inTopicNo.22)  Re[14]: C入門
□投稿者/ masa (19回)-(2017/12/22(Fri) 10:03:14)
No86145 (とっちゃん さん) に返信
再度の返信、ありがとうございます。

> 「VB6を持っているなら」と前置きしたうえで、いろいろやってみたら?となっています。

途中で薄々VB6の話かなと思いましたが、おもいっきり、はまってしまいました。
やはり、こういった点でもVB6と差別化がされているのですね。
VB.NETに切り替えてからはVB6の事はさっぱり忘れることにしました。
以降、ちょっとした事は動作が軽いVBAでばかり検証する癖がついています。
御指摘、ありがとうございました。
引用返信 編集キー/
■86160 / inTopicNo.23)  Re[14]: C入門
□投稿者/ masa (20回)-(2017/12/22(Fri) 10:42:58)
2017/12/22(Fri) 10:43:50 編集(投稿者)

No86146 (魔界の仮面弁士 さん) に返信
返信、ありがとうございます。

仰せの通り、VB.NETでCOM DLLを作成してRegAsmで作成したタイプライブラリを参照設定
したらあっさりVBAでVT_RECORDを取得できました。
どうもありがとうございました。

VBScriptでCreateObjectで呼び出せるActiveX DLLを作りたいとも思っていましたし、
SendInput APIも64ビット用の対応を考えていたので、おもいっきり勉強になりました。
今まで共用体についても用語は知っていましたが、今回の件で一層、理解が深まりました。
MOUSEINPUT構造体が64ビット環境では32バイトになることも、ぶなっぷさんに教えてもらった
方法で簡単に解るようになったし大収穫です。

一足早いクリスマスプレゼントを頂戴しました。
本当に感謝いたします。どうもありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ