VB2008からDLLを呼出し使いたい

このQ&Aのポイント
  • VB2008からFTPのDLLを呼び出し、使い方について教えてください。
  • 「dllftp.dll」というライブラリーを使用してFTPの機能を実装したいです。
  • 具体的には、DLLファイルの配置場所、VB2008での宣言方法、関数の使い方などが知りたいです。
回答を見る
  • ベストアンサー

VB2008からDLLを呼出し使いたい。

VB2008の初心者ですが、VB2008からはFTPのDLLを呼出し使いたいのですが、呼出方、使い方が解りませんので教えて下さい。 FTPのDLLなのですが、VECTORにありました、「dllftp.dll」というライブラリーです。 全部で5個のファイルが同梱されておりました。 1.このファイル類をどこにおけば良いのか。 2.VB2008での宣言はどうすれば良いのか。 3.関数としての使い方はどうすれば、同記述すれず良いのか。 READMEには以下の記述がありました。 以上宜しくお願い致します。 ------------------------------------------------------------- <関数の書式など> ●TsureFTP 関数 long TsureFTP( LPTSTR lpHostName,/* FTPサーバのアドレス(例えば127.1.2.3) */ LPTSTR lpUID, /* ユーザID */ LPTSTR lpPSWD, /* ユーザIDに対するパスワード */ LPTSTR lpReFile, /* リモートのファイル名(PUTの場合ローカルのファイル) */ LPTSTR lpLoFile, /* ローカルのファイル名(PUTの場合リモートのファイル) */ LPTSTR lpSelectStr, /* コマンド(GET,PUT,DELのいずれか) */ LPTSTR lpCurrentDir /* リモートのディレクトリに移動する場合指定 */ ); ●TsureFTP_ATR 関数 /* 戻り値を取得する構造体 */ typedef struct { char fname[256]; char fatrv[64]; /* 戻り値(メッセージ)を格納する変数 */ } UDT; UDT TsureFTP_ATR( LPTSTR lpHostName, /* FTPサーバのアドレス(例えば127.1.2.3) */ LPTSTR lpUID, /* ユーザID */ LPTSTR lpPSWD, /* ユーザIDに対するパスワード */ LPTSTR lpCurrentDir, /* リモートのディレクトリに移動する場合指定 */ LPTSTR lpReFile /* リモートのファイル名 */ ); lpCurrentDirは、FTPサーバ内でディレクトリを移動する場合、指定します。何も 移動が無い場合は、「""」を指定してください。 lpSelectStrがDELの場合、lpLoFileに何を指定しても関数には影響はありません。 ----------------------------------------------------------------------------- 以上宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

DLLはネイティブ(C言語用)のライブラリなので、DllImport属性またはDeclareキーワードを使って呼び出すことになります。 ファイルの置き場所はどこでもかまいませんが、場所によって指定の仕方が変わります。 自Exeと同じフォルダ、Windows\System32フォルダならDllのファイル名のみ、そのほかはフルパスでの指定だったと思います。 Declareの例: Public Declare Function TsureFTP Lib "dllftp.dll" ( 引数・・・) As Integer ※おそらくこの説明だけでは不十分だと思いますが、.NETからネイティブDLLの呼び出しは結構複雑(特にマーシャリングがややこしい)なのでこれ以上は割愛します。(私も正確に説明できる自信ナシ・・・) 単にFTPによるダウンロード・アップロードを行う簡易的なものであれば、ネイティブなDLLを使わなくても.NETの標準機能で実装できるようです。下記URLを参考にしてみてください。 http://chaichan.web.infoseek.co.jp/vbtips/VBMemo2007-03-22.htm

robotanmarch
質問者

お礼

迅速な回答有り難う御座いました。 お陰様で旨くいきました。 DLLを使わずに、下記の.NETの標準機能で行いました。 大変お世話になり有り難う御座いました。 ただ、もう一点あるのですが、この方法では今のところ、リモートサーバー側のディレクトリーが自動的に作成されません。 これのみが課題として残ってしまいました。 勉強をしてみます。 有り難う御座いました。 ---------------------------------------------------------------- 単にFTPによるダウンロード・アップロードを行う簡易的なものであれば、ネイティブなDLLを使わなくても.NETの標準機能で実装できるようです。下記URLを参考にしてみてください。 http://chaichan.web.infoseek.co.jp/vbtips/VBMemo2007-03-22.htm

関連するQ&A

  • 対話式FTPのシェル化の方法

    FTPのシェル化について質問があります。(同じドメインにあるLinuxマシン同士を想定しています。) ・get(put)でディレクトリを変えて指定することは可能ですか?例えば、"get /home/user1/file1"のように。 ・ftpを起動→ディレクトリ移動→指定ファイルのget の流れを自動化したいと考えています。よい方法はないでしょうか?ftpをあきらめてrcpにするしかないのでしょうか? 以上、ご教授願います。

  • VB6.0でFTPでのファイルの送受信

    VB6.0でFTPでのファイルの送受信(下記(1))をしようと考えております。 尚、コンポーネントは、インターネットトランスファコントロール(Inet)を使用しております。 (1)"リモートサーバーに対して、複数件のファイルを送信し、無事転送が完了したら(リモートサーバー の指定フォルダに送信された複数件のファイルがあるのを確認後)、  クライアント側のファイル(リモートサーバーに送信が済んだファイル)を消す" という処理を考えております。 ここで、質問なのですが (1)vbを使ったFTP転送で、複数件のファイルを一括転送(mputコマンドの使用)は、可能か?  (2)もし、(1)が不可能の場合、    "送信するファイルをputコマンドで1つ送って、リモート側にそのファイルがあるのを    getコマンドで確認して、もしgetであれば、クライアント側のそのファイルを消す" という処理を送信するファイル数分繰り返すことになるんですか?        1つのファイルの場合に、Inet1_State_Changeイベントで、ループさせstate = 12 の時( リモート側に正常に送信されたと考えて)、クライアント側のファイルを消していいのでしょうか?    VBのヘルプを見ると、state = 12 は、get処理で使用するというようなことを書いてありますが。     以上 

  • windows10 VB unlha32.dll

    VB で、debug モードでビルドするとOK,ですが、release モードでビルドすると下記エラーになります。 ”unlha32.dll がインストールされていません” unlha32dll は、実行ファイルのカレントディレクトリ、cドライブのwindows、その下のシステム32、sysWOW に入れています。windowsXP、VS2010のころに造った物を、win10用に流用して作り替えています。今は、VB2017 です。 解決方法を教えてください、unlhaの置き場、パス指定か、VBのreleaseビルドの設定か、などと類推します。. 

  • VC++6.0からVBで作成したActiveX.DLL内の関数が呼出しできない

    VB6.0で作成したActiveX.DLLをVC++6.0(Win32SDK)側で 呼び出すプログラムを作成中です。 VB側(DLL)では問題なく作成できています。 Classに1つPublic関数を作成しただけです。 (Instancingは5MultiUseにしてあります) しかし、VC++側の呼出しでDLL内の関数が 呼び出せないのです。 LoadLibraryExでDLL自体のハンドルは取得できるのですが GetProcAddressで関数の取得時にNULLが返ってきてしまいます。 今まで試したことは ・VBからの呼出しはOK ・MFCだとOK ・SDKでもuser32.dll呼出しのサンプルは関数も実行できる です。 今からMFCへ以降するのは厳しいのでSDkでの方法を 知りたいです。 VB側が悪いのかもしれませんが、関数1つですし、 いじるところもほとんどないので多分VC++側だと 思っています。 なにか注意点とか確認するところをおしえていただければ 幸いです。 環境 Windows2000 SP3 VB6.0 SP5 VC++6.0 SP5 Win32SDK

  • VC++のDLLファイルをVBで読み出せません。

    お世話になります。 プログラムをやり始めて3か月の初心者です。仕事で以下のような事をしていますが、うまくいかず悩んでいます。 プログラム(1):VB 2008年版 メインプログラム プログラム(2):C言語 2006年版 プログラム(3):VC++ VISUAL STUDIO2012 EXPRESSを使用 ■今のプログラム (2)のdllファイルを(1)で呼び出しています。問題なく動きます。 ■やりたい事 (2)のプログラム内容を変更したのが(3)です。そのdllファイルを(1)で呼び出したいです。 ⇒しかし、(3)のdllファイルを読み込むことができません。((3)のdllファイルは作れました。) (3)はVC単独では正しく動作します。 (1)のプログラムに、(2)を呼び出すときと同じように(3)用のプログラムを追加しました。作った(3)のdllファイルは指定したフォルダにきちんと入れています。 コンピューターに詳しい先輩が時間をかけてみてくれたのですが、結局わからずじまいでした。 ■質問 VBの型が古い、EXPRESSを使っているからできないのでしょうか? VCでdllを作って、VBで呼び出すまでの流れをわかりやすく紹介した書籍やWEBなどあればご教示頂けませんでしょうか? よろしくお願いいたします。

  • VB.NETで指定のURLにファイルを送る事は出来ますか?

    プロバイダーの自分のスペースなどにファイルを 送るプログラムをと思っているのですが、 VB.NETではその様なことは出来るでしょうか? FTPソフトなどを使って行う作業だと思いますが、 それと同じように、IDやパスワードを送信すれば ファイルを受け付けてくれるのでしょうか? まだ出来ればフォルダ(ディレクトリ)を作ったりも出来ると良いのですが。 VB.NETの何と言うものを使用するのか教えて頂けると助かります。 宜しくお願いします。

  • VB6.0を使用しています

    VB6.0を使用しています VC6.0でdefファイルで宣言してDLLを作成し VBのEXEよりDLLをCALLしています。 VBではDLLの関数をDeclareで宣言しています。 問題なのは ちょっと前まで問題なく動いたDLLですが 新規にDLL関数を追加したら EXEではちゃんと呼び出して処理を行なってくれておりますが VBのデバッグ起動で呼び出すと、その新規のDLLの関数がありませんと メッセージを通知して止まってしまいます、 EXEでは動くのにデバッグ起動ではだめなんでしょうか??不思議です もし、ご存知の方がいらっしゃいましたら教えてください。

  • VC++で作成したDLLについて

    すみません、 VC++6.0で作成したDLLについて教えていただきたいのですが。 TEST_A.DLLというDLLと、TEST_B.DLLというDLLファイルを作成したとして これをC:\TEST\DLL\に格納してるとします。 このとき、TEST_B.DLLからはTEST_A.DLLの関数を呼び出しています。 次に、TEST_B.DLLの関数を使用しているTEST.EXEという実行ファイルを VB6.0で作成します。 このファイルをC:\TEST\EXE\に格納します。 そして、TEST.EXEを実行すると、 「TEST_B.EDLLが見付かりません」と言って怒られてしまいます。 VBでは、TEST_B.DLLをフルパスで指定しております。 しかし、TEST_A.DLLをEXEと同じ場所に置いてあげると 正常に動きます。 これは、TEST_B.DLLからTEST_A.DLLが見えていないということなのでしょうか? TEST_B.DLLの設定がおかしいのでしょうか? それとも、TEST.EXEでもTEST_A.DLLをフルパス指定してあげないといけないのでしょうか? ちなみに今回、プロジェクトマネージャーから「環境変数(PATH)の設定はしたくない」と言われていますので、PATHの指定はしてません。 すみませんが、どなたか教えていただけますでしょうか?

  • VC++のDLLをVB6.0からVB.NETへ移行する方法

    はじめて投稿します。 今、現状VB6.0のプログラムで使用しているVC++のDLLを VB.NETで使用できるように、VB.NETのソースの改修をしています。 (開発環境は、VisualStudio.NET 2003) たいていのDLLは、DllImportを行うことで VB.NETから使用できることを確認しました。 /*--(例)------------------------------------------*/ Imports System.Runtime.InteropServices <DllImport("DLLTest.dll")> _ Private Shared Function DLLTestMethod() As Integer End Function /*------------------------------------------------*/ しかし、苦戦しているDLLファイルがあって、 そのソースを見ると、COMで実装されているようで、 コンパイルしたらタイプライブラリファイルが作成されています。 またDLLのレジストリも登録されているようです。 VB6.0でどう使われているか確認したところ、 そのDLLの参照設定をしていて、 "Public obj As New クラス名"でクラス宣言した後、 obj.関数名()で処理を行っています。 VB.NETでいろいろ試行錯誤してみましたが 参照設定はできるものの、その後で手詰まりになっています。 (参照設定しても、灰色になっているクラス名が存在するので 正しく設定できているかも怪しい状態) (1)----------------------------------------------- 参照設定後、オブジェクトブラウザから見えるクラスをNewして そのメンバ関数を使用する方法 -------------------------------------------------- (結果) レジストリ登録をしていないと 「CLSID{・・・}のCOMオブジェクトが有効でない」云々というエラーに。 それを受けて手動で該当するDLLのレジストリ登録を行った後だと 「オブジェクト参照がオブジェクトインスタンスに設定されません」というエラー。 (ということは、クラス生成に失敗している?) (2)----------------------------------------------- 上記のようにDllImportで実装する方法 (ちなみにそのDLLがエクスポートしている関数は DllCanUnloadNow, DllGetClassObject, DllRegisterServer, DllUnregisterServerの4つ) -------------------------------------------------- (結果) DllGetClassObject以外については関数を呼ぶことができている。 DllGetClassObjectは、引数設定に苦戦して今のところうまくいっていない状態。 (3)----------------------------------------------- インスタンス生成ができていないようなので どこかで調べて見つけてきたCoCreateInstance関数を使用する方法 -------------------------------------------------- (結果) これも引数に何を渡してよいかわからず試行錯誤中。 DLLの読み込みの時点でこけているかと予測して そのあたりが解決すればよいのかな・・・といろいろ試していますが WindowsプログラミングやCOMがよくわかっていないので 何が正解で何が間違っているのかさっぱりわからず、 周りに聞いても精通している人がいないためどうしようもなくなっています。 どんな些細な手がかりでもよいので 突破口になりそうなアドバイスがあれば教えてください。 よろしくお願いします。

  • ビルド後DLLのコピーをバッチで行いたい。

    VB2005環境です。 ソリューションのビルドを行うと、複数のDLLがDebugフォルダに 出力されるのですが、環境的に、それを別のディレクトリにそのまま コピーする必要があります。 この、ビルド→DLL出力→別のディレクトリへコピー、という 一連の作業をバッチファイルにして行いたいのですが、バッチの ビルドまでは msbuild フォルダパス\ソリューション でいけるのですが、この後の、出力されたもののコピーをやらせるには どうしたら良いか教えていただけないでしょうか? 最初からDLLの出力先を別ディレクトリに指定しておけばコピーする 手間は省けますが、事情によりそれは不可、ということでお願いします。

専門家に質問してみよう