VB2008によるOCX作成、またはHTMLからのDLL呼び出しは可能でしょうか?
こんにちは。
はじめての投稿になります。
私は現在、「ファイルを開く」のコモンダイアログボックスを起動できるHTML画面を作りたいと思っております。
その画面ではサーバ側のファイルを閲覧させたいのですが、認証やセキュリティなどの観点から、
ダイアログボックスの起動はクライアント側で動作するようにしたいです。
それにあたって、ダイアログボックスを呼び出すオブジェクトをAxtiveXコントロール(OCX)で作成し、
そのOCXをHTMLから呼び出すことで実現できないかと考えました。
そこで、以下のことを調べております。
(1)無償のVB開発環境を使ってAxtiveXコントロールを作成することができるか?
(2)AxtiveXコントロールを作成できないなら、AxtiveX DLLをHTMLから呼び出せるか?
ちなみに現在使用している「無償のVB開発環境」は、Visual Studioの Visual Basic 2008 Express Edition です。
(1)に関しては、VB6ではAxtiveXコントロールを作成できたと聞きますが、どうもVB2008では(.Netでは)作成できないようです。(現在までに見つけた情報に、「.Netで作成できる」というものがないため)
(2)に関しては、VB2008 Express Edition を使って、ダイアログボックスを呼び出す AxtiveX DLL を作成することには成功しています。
VBのCOMクラスのテンプレートにダイアログボックス起動の関数を記述し、ビルドしてdllを作成。
↓
別途VBによるWindowsフォームアプリケーションを作成し、「参照の追加」で上記dllを登録してダイアログボックス起動の関数を呼び出す。
という方法で、ダイアログボックスを呼び出せました。
ですので、HTMLの画面からも同じようにdll呼び出しができないかと思ったのですが、現在のところ方法が見つかりません。
ダイアログボックスを開く機能さえあればよく、ユーザーインターフェースは不要なので AxtiveX DLL でもよいと思ったのですが、HTMLからの呼び出しにはDLLではなくOCXを用いるという情報しか見つけられませんでした。
以上のことから、VB2008ではHTMLからダイアログボックスを呼び出すActiveXを作れないのではないか?と思える状態なのですが、それが可能であるという話がもしありましたら、お教えいただきたく思います。
最低限「クライアント側からのダイアログボックス起動ができるHTML」「ダイアログボックス起動はVBで作成」という条件を満たせればよいので、(1)(2)で実現できなければ別の方法を探すことにします。
最後に
必要かどうかわかりませんが、(2)で試しに作ったダイアログボックス呼び出しのCOMクラスのソースを載せておきます。
ご回答の参考になりますでしょうか。
Imports System.Windows.Forms
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
Public Const ClassId As String = "2bdd38a4-f946-44e2-af47-5b9cbd2c24d5"
Public Const InterfaceId As String = "fcd22890-f4cd-4e2a-b8c0-ae83f290c250"
Public Const EventsId As String = "86c74809-966a-47cf-9324-adce776030eb"
Public Sub New()
MyBase.New()
End Sub
Public Function subOpenFile(ByVal inFilePass As String) As Boolean
subOpenFile = False
'OpenFileDialogクラスのインスタンスを作成
Dim ofd As New OpenFileDialog()
If inFilePass = "" Then
ofd.InitialDirectory = "C:\"
Else
ofd.InitialDirectory = inFilePass
End If
ofd.Filter = "HTMLファイル(*.html;*.htm)|*.html;*.htm|すべてのファイル(*.*)|*.*"
ofd.FilterIndex = 2
ofd.Title = "開くファイルを選択してください"
ofd.RestoreDirectory = True
ofd.CheckFileExists = True
ofd.CheckPathExists = True
'ダイアログを表示
If ofd.ShowDialog() = DialogResult.OK Then
Console.WriteLine(ofd.FileName)
End If
subOpenFile = True
End Function
End Class
(呼び出し側では以下の記述で呼び出しに成功しました)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Test As New COMTest1.ComClass1
Call Test.subOpenFile("C:\WINDOWS")
End Sub
以上、よろしくお願いいたします。
お礼
PCboyさん、回答ありがとうございました。 分かりやすかったです。 ちょっとできたのでうれしいです。 ありがとうございました。