DLLファイルを出力しないようにするには?

解決


初心者  2009-01-20 10:49:14  No: 141319  IP: 192.*.*.*

VB2008にてProjectをRelease(発行)するとdllが作成されexeを実行する際はそのDLLを参照しないと動かない(エラーとなる)状況です。これをexeだけで動くようにしたいのですが可能でしょうか?exeのみを持ち運びしたいのでインストール(Setup)や、DLLなどの参照ファイルは極力避けたいのですが。良い方法はありますでしょうか?
追記:DLLは「Interop.Word.dll」(Microsoft word 10.0 Object Library)で、wordファイル作成など操作処理をする際にこのDLLを参照しています。

編集 削除
たい  2009-01-20 12:00:09  No: 141320  IP: 192.*.*.*

>wordファイル作成など操作処理をする際にこのDLLを参照

>exeだけで動くようにしたい

このふたつを両立することは不可能でしょうね。

編集 削除
初心者  2009-01-20 13:21:12  No: 141321  IP: 192.*.*.*

DLLを組み込むことはできないのですかね。やはり参照がある場合、DLLはexeと対で持たなければならないのか〜...たいさんありがとうございます。

編集 削除
魔界の仮面弁士  2009-01-20 13:32:49  No: 141322  IP: 192.*.*.*

> wordファイル作成など操作処理をする際にこのDLLを参照しています。
参照設定を外して、レイトバインドに切り替えてみては如何でしょうか。

> DLLを組み込むことはできないのですかね。
2010 では可能ですが、2008 の機能には無いですね。

編集 削除
初心者  2009-01-20 14:38:06  No: 141323  IP: 192.*.*.*

魔界の仮面弁士さんありがとうございます。
参照設定無しでもWordの操作は可能なのでしょうか?「レイトバインド」について調べてみたのですがよく理解できません。参照設定しないコードの記述方法を言うのでしょうか?

編集 削除
魔界の仮面弁士  2009-01-20 14:52:29  No: 141324  IP: 192.*.*.*

> 参照設定無しでもWordの操作は可能なのでしょうか?

とりあえず、起動→保存→終了だけに単純化したサンプル。


Imports System.Runtime.InteropServices
Public Class Form1
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim wd As Object = CreateObject("Word.Application")
        Dim docs As Object = wd.Documents
        Dim doc As Object = docs.Add()
        wd.Visible = True
        MsgBox("ワードを起動しました。", vbInformation Or vbSystemModal)
        doc.SaveAs("C:\sample.doc", 0)
        MsgBox("sample.docとして保存しました。", vbInformation Or vbSystemModal)
        Marshal.ReleaseComObject(doc)
        Marshal.ReleaseComObject(docs)
        wd.Quit()
        Marshal.ReleaseComObject(wd)
        MsgBox("Wordを終了させました。", vbInformation Or vbSystemModal)
    End Sub
End Class

編集 削除
初心者  2009-01-20 15:56:22  No: 141325  IP: 192.*.*.*

魔界の仮面弁士さんありがとうございます。
お陰様でWordの作成が可能になりました。度々ですみませんが、
レイトバインドでのwordの”行(セレクト位置)”移動などの操作について参照設定の場合、
.MoveDown(Word.WdUnits.wdLine, Count:=2, Extend:=Word.WdMovementType.wdMove)    
となるのですが、この”Word”部分もObject("Word.Application")の変数に切り替えられるのでようか?"Applicationにみつかりません"や"Documentにみつかりません"と怒られてしまいます。

編集 削除
魔界の仮面弁士  2009-01-20 16:39:56  No: 141326  IP: 192.*.*.*

列挙型は、同等値の整数または列挙値に書き換えてください。

例えば、
  Const wdMove As Integer = 0    'Word.WdMovementType.wdMove の代用
  Const wdLine As Integer = 5    'Word.WdUnits.wdLine の代用
などのようにして、これらの値を代わりに利用します。

編集 削除
初心者  2009-01-20 17:12:07  No: 141327  IP: 192.*.*.*

魔界の仮面弁士さんありがとうございました。助かりました。
すべての書式設定をIntegerに直して代入したところ正常に動作しました。
わりと面倒ですがこれで進めて行きたいと思います。

編集 削除