掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
引数がマーシャリングした配列のVBのDLLの関数をVBAから呼び出すには? (ID:147944)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
魔界の仮面弁士さん いろいろ確認していただきましてありがとうございます。 (1) >構造体で渡すよりも、クラスで渡した方が問題が少ないような気も。 昨日からクラスで渡す方法も検討していました。 以下のコードで確認しているのですが、 VBE側の MsgBox t_o.x(i) のところで、 「実行時エラー'450' 引数の数が一致しません。 または不正なプロパティを指定しています。」 というエラーが出るのですが、何がいけないのでしょうか。 ---VB.NET側DLL(プロジェクト名ClassLibrary1)--- Public Class Class1 Public Sub fx(ByRef t1_o As T1) Dim i As Integer t1_o.y = 2 ReDim t1_o.x(t1_o.y) For i = 0 To t1_o.y - 1 t1_o.x(i) = "NO" & i Next End Sub End Class Public Class T1 Public x() As String Public y As Integer End Class ---VBA側------------------------------------ Option Explicit Public vb_o As New ClassLibrary1.Class1 Public t_o As New ClassLibrary1.T1 Public Sub test() Dim i As Long Call vb_o.fx(t_o) MsgBox t_o.y For i = 0 To t_o.y - 1 MsgBox t_o.x(i) Next i End Sub ----------------------------------------------- (2) >そのライブラリを、(VBA ではなく)VB.NET から参照した場合はどうですか? VB.NETのCOMのDLLをVBAではなくVB.NETから参照するということでよろしいでしょうか。 VBA32のコードをVB.NETのコードとして以下のように書き換えてみましたが、 参照の追加ダイアログのCOMタブから追加すると「'ClassLibrary1'への参照を追加できませんでした。ActiveXタイプライブラリ'C…ClassLibrary1.tlb'が.NETアセンブリからエクスポートされましたが、参照として追加できません。.NETアセンブリへの参照を追加してください。」というエラーになるのですが、VBAで使用したDLLとは異なってしまうのですが、一度、COM相互運用機能の登録のチェックボックスをOFFにして、再度ビルドし直したDLLでの確認ということでよろしいでしょうか。 ---VB.NET(ConsoleApplication)-------------------------------- Imports ClassLibrary1.Class1 Module Module1 Public vb_o As New ClassLibrary1.Class1 Sub Main() Dim t_o As New T1 Dim i As Long Call vb_o.fx(t_o) MsgBox(t_o.y) For i = 0 To t_o.y - 1 MsgBox(t_o.x(i)) Next i End Sub End Module ------------------------------------------------------------- よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.