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

わんくま同盟

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

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

ツリー一括表示

クラスライブラリでのObject型について /kumakuma (20/03/25(Wed) 05:45) #94205
Re[1]: クラスライブラリでのObject型について /魔界の仮面弁士 (20/03/25(Wed) 09:11) #94207
  └ Re[2]: クラスライブラリでのObject型について /kumakuma (20/03/25(Wed) 12:26) #94212 解決済み


親記事 / ▼[ 94207 ]
■94205 / 親階層)  クラスライブラリでのObject型について
□投稿者/ kumakuma (3回)-(2020/03/25(Wed) 05:45:18)

分類:[VB.NET/VB2005 以降] 

vb.netで開発したクラスライブラリでのObject型について

現在vb.net Fremework 4.5.2の環境にてExcel等Officeで参照可能なライブラリとして
クラスライブラリの開発を行っています。
質問です。
公開するファンクションやイベントでObject型を強制することは可能でしょうか?
vb.netではvariant型の変わりにObject型になっています。
その為かクラスライブラリでのObject型がすべてvariant型に変換されていまいます。
これを変換させない方法はありますでしょうか?
□例
vb.net側 Function aaa(b as Object) as Object
vba側  Function aaa(b as Object) as Object

Objectの中身はJsonのオブジェクトで構成が一定ではありません。
その為、型やクラスに置き換えしづらい事と1000単位で修正しなくてはなりません。

ご指導のほどよろしくお願いします。

[ □ Tree ] 返信 編集キー/

▲[ 94205 ] / ▼[ 94212 ]
■94207 / 1階層)  Re[1]: クラスライブラリでのObject型について
□投稿者/ 魔界の仮面弁士 (2636回)-(2020/03/25(Wed) 09:11:58)
No94205 (kumakuma さん) に返信
> 公開するファンクションやイベントでObject型を強制することは可能でしょうか?
これでどうでしょう。

Public Sub SetVariant(ByVal o As Object)
Public Sub SetVariantRef(ByRef o As Object)
Public Function GetVariant() As Object

Public Sub SetIDispatch( <MarshalAs(UnmanagedType.IDispatch)> ByVal o As Object)
Public Sub SetIDispatchRef( <MarshalAs(UnmanagedType.IDispatch)> ByRef o As Object)
Public Function GetIDispatch() As <MarshalAs(UnmanagedType.IDispatch)> Object

Public Sub SetIUnknown( <MarshalAs(UnmanagedType.IUnknown)> ByVal o As Object)
Public Sub SetIUnknownRef( <MarshalAs(UnmanagedType.IUnknown)> ByRef o As Object)
Public Function GetIUnknown() As <MarshalAs(UnmanagedType.IUnknown)> Object
[ 親 94205 / □ Tree ] 返信 編集キー/

▲[ 94207 ] / 返信無し
■94212 / 2階層)  Re[2]: クラスライブラリでのObject型について
□投稿者/ kumakuma (6回)-(2020/03/25(Wed) 12:26:52)
No94207 (魔界の仮面弁士 さん) に返信
> ■No94205 (kumakuma さん) に返信
>>公開するファンクションやイベントでObject型を強制することは可能でしょうか?
> これでどうでしょう。
>
> Public Sub SetVariant(ByVal o As Object)
> Public Sub SetVariantRef(ByRef o As Object)
> Public Function GetVariant() As Object
こちらは今まで通りvariant型ですね。
> Public Sub SetIDispatch( <MarshalAs(UnmanagedType.IDispatch)> ByVal o As Object)
> Public Sub SetIDispatchRef( <MarshalAs(UnmanagedType.IDispatch)> ByRef o As Object)
> Public Function GetIDispatch() As <MarshalAs(UnmanagedType.IDispatch)> Object
こちらで無事Object型で登録されている事を確認できました。
> Public Sub SetIUnknown( <MarshalAs(UnmanagedType.IUnknown)> ByVal o As Object)
> Public Sub SetIUnknownRef( <MarshalAs(UnmanagedType.IUnknown)> ByRef o As Object)
> Public Function GetIUnknown() As <MarshalAs(UnmanagedType.IUnknown)> Object
こちらの場合Unknown型で登録されました。

こちら1週間ほど悩んでいたので本当にありがとうございます。
また個人的にはなりますが魔界の仮面弁士さんの様々な回答でいままで本当に助かっております。
私の知識の半分は魔界の仮面弁士さんのおかげといっても過言ではございません。
本当にありがとうございました。


解決済み
[ 親 94205 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -