掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
引数がマーシャリングした配列のVBのDLLの関数をVBAから呼び出すには? (ID:147938)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になります。 「引数が構造体のVBのDLLの関数をVBAから呼び出すには?」 http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi?print+201210/12100006.txt で教えていただきましたマーシャリングの方法で、まだよく理解できていない部分がありますので教えてください。String型の変数をマーシャリングした場合は問題ないのですが、String型の配列をマーシャリングした場合にうまくいきません。 例えば、下記のコードでは、実行時に、Call vb_o.fx(t_o)の部分で「実行時エラー'2146233054(80131522)':オートメーションエラーです。」というエラーになります。マーシャリングする必要のないInteger型の配列などではエラーにならないのですが、マーシャリングすると配列がうまく渡せなくなるようです。どのように記述すれば、マーシャリングしたString型の配列を渡すことができるのでしょうか。 ---VB.NET側DLL(プロジェクト名ClassLibrary1)--- Imports System.Runtime.InteropServices Public Class Class1 Public Structure T1 <MarshalAs(UnmanagedType.BStr)> Public x() As String Public y As Integer End Structure Public Sub fx(ByRef t1_o As T1) Dim i As Integer t1_o.y = 2 'DLL側で決まる値(配列サイズ) 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 ---VBA32側--------------------------------- Option Explicit Public vb_o As New ClassLibrary1.Class1 Public Sub test() Dim t_o As 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 ------------------------------------------- よろしくお願いします。 (WindowsXP,Excel2003_VBA,VisualStudio2010)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.